从重复列表中选择具有ID的每个不同副本

时间:2014-04-09 19:15:24

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

我使用以下查询根据全名查找表中的重复记录。 现在我需要根据全名从重复项中选择1个不同的conntactid。 这就是我所拥有的:

select c.namefml from contact c
where c.contactrecordtype = 'CONTACT'
group by c.namefml
HAVING COUNT (c.namefml)>1

但是,我似乎无法使用这个子查询来根据名字选择不同的联系人ID。如果我这样做,它会列出所有重复项的联系人ID,因为联系人ID是唯一的全部为所有重复的联系人。大约有180个不同的重复联系人,但共有445个重复联系人。

如何根据重复联系人的全名获得明确的联系人ID /联系人全名。

2 个答案:

答案 0 :(得分:2)

由于您的姓名是您的相关信息,请使用MIN或MAX选择任何ID:

WITH        Sample AS
(
            SELECT 1 ID, 'ABC' Name UNION ALL
            SELECT 2 ID, 'ABC' Name UNION ALL
            SELECT 3 ID, 'XYZ' Name
)
SELECT      MIN(ID) MinID, Name, COUNT(*) Duplicates
FROM        Sample
GROUP BY    Name

结果

MinID   Name    Duplicates
    1   ABC     2
    3   XYZ     1

答案 1 :(得分:0)

您正在尝试选择重复的值,在这种情况下为namefml,然后在子查询中使用它来过滤记录。因此查询必然会返回与条件匹配的所有记录。

而是尝试使用MINMAX来获取表中不同的ID,然后在子查询中使用它来获得所需的结果。尝试像

这样的东西
SELECT MIN(c.contact-id)...