我想使用主键或标识列从SQL表中找到重复的名称。
我有三列:ID,FirstNameAR,SecondNameAR。
我正在使用以下查询检索数据:
SELECT FirstNameAR, SecondNameAR, COUNT(*)
FROM Persons
GROUP BY FirstNameAR, SecondNameAR
HAVING COUNT(*) > 1
此查询的结果是我得到重复名称的计数,但是没有得到其ID。
我需要重复名称的ID。
答案 0 :(得分:2)
只需将其重新添加到表格中即可:
SELECT P.*
FROM Persons AS P
INNER JOIN (
SELECT FirstNameAR
, SecondNameAR
FROM Persons
GROUP BY FirstNameAR
, SecondNameAR
HAVING COUNT(*) > 1
) AS DUB
ON DUB.FirstNameAR = P.FirstNameAR
AND DUB.SecondNameAR = P.SecondNameAR
答案 1 :(得分:1)
一种方法是将count用作窗口函数:
WITH CTE AS
(
SELECT Id
, FirstNameAR
, SecondNameAR
, COUNT(*) OVER(PARTITION BY FirstNameAR, SecondNameAR) As Cnt
FROM Persons
)
SELECT Id
, FirstNameAR
, SecondNameAR
, Cnt As [Number of duplicates]
FROM CTE
WHERE Cnt > 1
答案 2 :(得分:1)
SELECT FirstNameAR, SecondNameAR,COUNT(*), string_agg(id,',')
FROM Persons
GROUP BY FirstNameAR, SecondNameAR
HAVING COUNT(*) > 1
如果您使用SQL Server 2017或SQL Server Vnext,SQL Azure,请尝试以下操作:)