1

如果措辞不佳,我深表歉意,但我不是 100% 清楚如何表达我脑海中正在发生的想法。开始:

我有一个包含几列的表,但这里有三个有问题:contactIDprimaryIDAddress

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

一些联系人目前是家长,应该有一个 SecondaryID。如果我有三个联系人,我想为其中两个分配一个primaryID,该primaryID 等于第三个的contactID。我不一定关心哪两个获得primaryID。

有没有可以想象的方法来做到这一点?

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

编辑:如果我可以使用其中一个重复项的contactID 更新所有重复项primaryID,它也会起作用。

例子

4

1 回答 1

1

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

它还contactID通过使用从这组重复项中获取一个MIN(ContactID). 然后将此集合中的所有重复项contactID分配给每个,但具有等于PrimaryID的重复项除外:ContactIDMinContactID

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
于 2013-01-24T15:49:44.473 回答