【问题标题】:Selecting each distinct duplicate with ID from a list of duplicates从重复项列表中选择每个具有 ID 的不同重复项
【发布时间】:2014-04-11 18:06:47
【问题描述】:

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

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/联系人全名。

【问题讨论】:

  • 请向我们展示数据的子集和预期的结果,它太抽象了。
  • 试试SELECT MIN(c.contact-id),然后在子查询中使用它。

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


【解决方案1】:

由于您的姓名是您的相关信息,因此请使用 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

【讨论】:

    【解决方案2】:

    您正在尝试选择一个重复的值,在本例中为 namefml,然后在子查询中使用它来过滤记录。所以查询必然会返回所有符合条件的记录。

    尝试使用MINMAX 来获取表中不同的id,然后在子查询中使用它来获取所需的结果。尝试类似

    SELECT MIN(c.contact-id)... 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 2021-12-04
      • 2013-11-18
      • 2022-11-30
      相关资源
      最近更新 更多