根据单个列中的重复值返回记录(多列)

时间:2017-04-04 16:08:22

标签: sql sql-server sql-server-2008

请原谅我的SQL知识的基本水平......我现在还在自学。

我知道如果我运行以下内容,我会得到完整的卡片,名称和UID列表。

SELECT  
Keycards.KeyNumber, Personnel.LastName, Personnel.FirstName, Personnel.SSN
FROM     
Keycards INNER JOIN
 Personnel ON Keycards.UserID = Personnel.UserID
ORDER BY   KeyNumber

我知道如果我运行以下内容,我会得到重复的卡号列表:

SELECT  Keycards.KeyNumber
FROM  Keycards
GROUP BY   KeyNumber
HAVING        COUNT(*) > 1

那么我怎么能得到一个重复的卡号列表,WITH名称和UID' s-仅基于重复的卡号...... ??

1 个答案:

答案 0 :(得分:3)

将第二个查询放入子查询中,并使用它将结果集限制为仅包含重复出现的键号。

SELECT k1.KeyNumber,
       p.LastName,
       p.FirstName,
       p.SSN
FROM Keycards k1
INNER JOIN
(
    SELECT KeyNumber
    FROM Keycards     
    GROUP BY KeyNumber
    HAVING COUNT(*) > 1
) k2
    ON k1.KeyNumber = k2.KeyNumber
INNER JOIN Personnel p
    ON k1.UserID = p.UserID
ORDER BY k1.KeyNumber