使用主键从SQL表中查找重复的名称

时间:2020-07-07 07:52:13

标签: sql sql-server

我想使用主键或标识列从SQL表中找到重复的名称。

我有三列:ID,FirstNameAR,SecondNameAR。

我正在使用以下查询检索数据:

SELECT FirstNameAR, SecondNameAR, COUNT(*)
FROM Persons
GROUP BY FirstNameAR, SecondNameAR
HAVING COUNT(*) > 1 

此查询的结果是我得到重复名称的计数,但是没有得到其ID。

我需要重复名称的ID。

3 个答案:

答案 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,请尝试以下操作:)