我有一个名为TempAllAddresses
以下列的表 - ID
, Address
, State
. 我想用 、 和 填充一个Address
新State
表Count
。Count
应该表示 TempAllAddresses 表中有多少记录具有类似此地址的地址,后跟通配符。如果这没有意义,这里有一个例子来说明 - 假设我有这样的记录:
ID Address State
12345 13 Phoenix NY
我想要做的是将一条新记录插入一个名为的新表中,该表AddressCount
有13 个 Phoenix 表示. _Address
State
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 条记录也有 NY,然后有“13 Phoenix Road”和“13 Phoenix”的地址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
基本上,对于每条记录,我想获取表中具有相同状态的记录数以及以该地址开头的地址(或等于......我确实想将此地址作为计数的一部分) )。