TempAllAddresses
次の列で呼び出されるテーブルがあります- ID
、、、。新しいテーブルに、、およびを入力したいと考えています。TempAllAddresses テーブル内に、このアドレスのようなアドレスの後にワイルドカードが続くレコードがいくつあるかを表す必要があります。それが意味をなさない場合は、ここに説明する例があります-次のようなレコードがあるとしましょう:Address
State
Address
State
Count
Count
ID Address State
12345 13 Phoenix NY
AddressCount
私がしたいことは、 の 13 フェニックス、 のAddress
NY State
、および州として NY を持ち、 '13 Phoenix%' のようなアドレスを持つテーブル内のレコードの数を持つという名前の新しいテーブルに新しいレコードを挿入することですCount
。_
TempAllAddresses 自体の内部結合でこれを達成したいと考えています。これは私が試したものですが、探しているものを達成していないようです:
SELECT t1.Address, t1.State, COUNT(t2.address) As NumEntities
FROM TempAllAddresses t1
INNER JOIN TempAllAddresses t2
ON t1.state = t2.state
AND T2.Address LIKE t1.address + '%'
GROUP BY t1.State, t1.Address
ただし、カウントは間違いなくオフです。" " を実行するのと同じはずSELECT COUNT(*) FROM TempAllAddresses WHERE State=thisRecordsState and Address LIKE thisRecordsAddress + '%'
です。どうすればこれを達成できますか? 私は何を間違っていますか?
編集:
カウントは次のようにずれているようです - 上記のようなレコードがあり、他に 2 つのレコードがあり、ニューヨーク州もあり、住所が「13 フェニックス ロード」と「13 フェニックス」であるとします。 Rd」の場合、次のようなレコードをファイナル テーブルに入れたいと考えています。
13 Phoenix NY 3
代わりに、私は得ているようです:
13 Phoenix NY 9
ここで何が起こっているのかよくわかりません...ある種のデカルト積ですか?順列…?誰でもこれを説明できますか?
編集2: 誤解されているように見えるので、さらに編集します(そして本当に解決策が必要です:()...これは、私が探しているものを達成する相関サブセレクトを使用したクエリです。同じことをしたい副選択ではなく、テーブル自体の内部結合を使用します。
SELECT Address, State,
(SELECT Count(*)
FROM TempAllAddresses innerQry
WHERE innerQry.address LIKE outerQry.address + '%'
AND innerQry.state = outerQry.state) As NumEntities
FROM TempAllAddresses outerQry
基本的に、各レコードについて、同じ状態と、このアドレスで始まるアドレスを持つテーブル内のレコードの数を取得したい (または等しい... このアドレスをカウントの一部として含めたい)。