我有一个包含NAP字段的列表表格,我希望在其中找到重复内容 - 特别是除了门牌号码(2或3位数字内)之外的所有内容都相同。
我的表看起来像这样:
Name Housenumber Streetname Streettype City State Zip
1 36 Smith St Norwalk CT 6851
2 38 Smith St Norwalk CT 6851
3 1 Kennedy Ave Campbell CA 95008
4 4 Kennedy Ave Campbell CA 95008
我想知道如何设置qry来查找这些记录。
我尝试了一些但却无法弄清楚如何做到这一点 - 任何帮助都会受到赞赏。
由于
答案 0 :(得分:2)
您是否希望找到能够显示此类行数的内容?
SELECT
StreenName,
City,
State,
Zip,
COUNT(*)
FROM YourTable
group by StreenName, City, State, Zip
HAVING COUNT(*) >1
或者尝试查找具有相同街道,城市,州和邮政编码的所有行?
SELECT
A.HouseNumber,
A.StreetName,
A.City,
A.State,
A.Zip
FROM YourTable as A
INNER JOIN YourTable as B
ON A.StreetName = B.StreetName
AND A.City = B.City
AND A.State = B.State
AND A.Zip = B.Zip
AND A.HouseNumber <> B.HouseNumber
答案 1 :(得分:0)
这是一种方法。您需要一个唯一的ID才能运行此表,因为您不希望选择完全相同的人(如果他们是唯一的那个人)。这只会吐出至少有一个副本的所有结果。
编辑:Woops,刚刚在评论中意识到varchar表示街道号码......嗯。所以你可以在它上面运行一个演员。 OP从未说过varchar中的门牌号码或者原帖中的字母和数字。至于街道号码领域的信件,我过去2年来一直是第三方运输提供商,我从未见过一个;除了apt之外,这将是一个diff字段。它有可能是因为某些其他原因(导致0的)将varchar放在那里,或者没有理由。在没有OP的回应的情况下,可能存在,但没有办法知道该领域的什么。要为每个实例运行强制转换为int,除此之外:Cast(mt.HouseNumber as int)
select *
from MyTable mt
where exists (select 1
from MyTable mt2
where mt.name = mt2.name
and mt.street = mt2.street
and mt.state = mt2.state
and mt.city = mt2.city
and mt2.HouseNumber between (mt.HouseNumber -3) and (mt.HouseNumber +3)
and mt.UID != mt2.UID
)
order by mt.state, mt.city, mt.street
;
如果有来信的话,不知道如何运行-3 + 3 ......除非你知道他们在哪里,你可以简单地将它们剪掉然后再投射。