如何在一列上找到重复项

时间:2016-07-19 09:05:29

标签: sql-server tsql

我有一个SQL服务器数据库,并且在一个(RanjePhoneNumber)列中有许多重复。 我试图从RanjePhoneNumber列中具有重复项的表中选择行,并且它们具有相同的CityId。

我的表:

RanjePhoneNumber    ContactId   CityId
776323          280739      7
342261          186372      80
468284          75980       7
776323          101969      9
362875          170242      13
224519          164914      7
342261          203606      55
776323          280733      7
342261          203602      80

我的预期结果:

RanjePhoneNumber    ContactId   CityId
776323          280739      7
342261          186372      80
776323          280733      7
342261          203602      80

2 个答案:

答案 0 :(得分:2)

按这两列分组:

SELECT RanjePhoneNumber, CityID
FROM dbo.TableName
GROUP BY RanjePhoneNumber, CityID
HAVING COUNT(*) > 1

如果要选择所有列,可以使用排名功能:

WITH CTE AS
(
    SELECT t.*, Cnt = COUNT(*) OVER (PARTITION BY RanjePhoneNumber, CityID)
    FROM dbo.TableName
)
SELECT RanjePhoneNumber, ContactId, CityId 
FROM CTE
WHERE Cnt > 1

如果您不想查找属于此“重复组”的所有行,但只想查找除第一个之外的所有行,请使用显示的ROW_NUMBER方法the other answer

答案 1 :(得分:1)

;with cte
as
(select 
Ranjephonenumber,
contactid,
cityid,
row_number() over (partition by Ranjephonenumber,cityid order by cityid) as rn
from table
)
select 
Ranjephonenumber,contactid,city from cte where rn>1