Sql 试图在地址仅在一个字段和某个数字上不同的记录中查找重复
我有一个包含NAP字段的列表,我想在其中找到重复项——特别是除了门牌号(在2或3位以内)之外,所有内容都是相同的 我的桌子看起来像这样:Sql 试图在地址仅在一个字段和某个数字上不同的记录中查找重复,sql,duplication,Sql,Duplication,我有一个包含NAP字段的列表,我想在其中找到重复项——特别是除了门牌号(在2或3位以内)之外,所有内容都是相同的 我的桌子看起来像这样: Name Housenumber Streetname Streettype City State Zip 1 36 Smith St Norwalk CT 6851 2 38 Smith St Norwalk CT
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来查找这样的记录
我试过一些方法,但不知道怎么做-任何帮助都将不胜感激
谢谢您是否希望找到显示这些行数量的内容
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
选择
A.门牌号,
A.街道名称,
A.城市,
A.国家,
A.拉链
从你的桌子上
将表内部连接为B
在A.StreetName=B.StreetName上
A.城市=B.城市
A.状态=B.状态
A.Zip=B.Zip
A.门牌号B.门牌号
这里有一种方法。您需要一个表的唯一ID来运行此操作,因为您不希望选择完全相同的人(如果他们是唯一的人)。这将在至少有一个重复的地方吐出所有结果
编辑:Woops,刚刚在评论中意识到它说varchar代表街道号码…嗯。所以你可以在上面做个演员。OP从来没有提到过varchar中的门牌号,也没有提到原始帖子中的字母和数字。至于“街道号码”字段中的字母,我在过去2年里一直是第三方运输提供商,但我从未见过这样的供应商;除了apt,它将是一个差异字段。很可能有人出于其他原因(领先0)或没有原因将varchar放在那里。当然可以,但是如果没有OP的响应,就无法知道字段中的内容。要运行cast To int,除了每个实例之外都是一样的:cast(mt.HouseNumber as int)
不知道如何运行-3+3,如果有信件的发票…除非你知道他们在哪里,你可以简单地把他们剪掉然后再投。什么是门牌号的数据类型?另外,如果忽略2或3位以内的部分,您知道怎么做吗?2或3位,您的意思是“36”将匹配“34(33)”和“38(39)”之间的值或“1”和(9)999之间的值吗?@DanBracuk它是varchar(10),不,我不知道如何忽略相隔2或3位的值。@lc。我的意思是36将匹配33/34和38/39之间的值。@Zane答案中的第二个查询显示了如何忽略相隔2或3位的值。考虑到门牌号有时包含字母,他的回答可能会非常好。
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
;