识别重复项

时间:2013-01-24 15:42:16

标签: tsql duplicates

如果措辞不当,我道歉但是我并不是100%明白如何说出我脑海中浮现的想法。这是:

我有一个包含多个列的表格,但这里有三个问题: contactID primaryID 地址

此表包含联系信息,姓名,地址,电话号码等。除了包含相同地址之外,有几行在各方面都是唯一的。 这些行基本上是其他联系人的联系人(或子联系人)。这些由名为 TypeNum 的第4列和包含SecondaryID的第二列唯一标识。 (这些信息实际上并不重要,但可能有助于解释我为什么要问我要问的内容

有些联系人目前正在作为父母,并且应该有一个SecondaryID。如果我有三个联系人,我想为其中两个分配一个等于第三个联系人的contactID的primaryID。我不一定关心哪两个获得了primaryID。

有什么可以想到的方法吗?

编辑:我在下面添加了一个示例图片。我想让第二行和第三行的 primaryID 等于第一行的 contactID (实际上,哪两个获得 contactID 并不重要,只要它的2/3和2获得第三个的contactID。

编辑如果我可以使用其中一个重复项的contactID更新所有重复项的主ID,那么它也会有效。

EXAMPLE

1 个答案:

答案 0 :(得分:1)

此查询首先使用contacts查找具有相同address的三个或更多条目的HAVING COUNT(*) >= 3

使用contactID从这组重复项中获取MIN(ContactID)。然后,对于此集合中的所有重复项,此contactID分配给每个PrimaryID,但ContactID等于MinContactID的副本除外:

UPDATE c
SET c.PrimaryID = dups.MinContactID
FROM
    Contacts c 
    JOIN (
        SELECT MIN(ContactID) AS MinContactID, Address
        FROM Contacts
        GROUP BY Address
        HAVING COUNT(*) >= 3
    ) dups ON c.Address = dups.Address AND c.ContactID <> dups.MinContactID