如果措辞不当,我道歉但是我并不是100%明白如何说出我脑海中浮现的想法。这是:
我有一个包含多个列的表格,但这里有三个问题: contactID , primaryID 和地址
此表包含联系信息,姓名,地址,电话号码等。除了包含相同地址之外,有几行在各方面都是唯一的。 这些行基本上是其他联系人的联系人(或子联系人)。这些由名为 TypeNum 的第4列和包含SecondaryID的第二列唯一标识。 (这些信息实际上并不重要,但可能有助于解释我为什么要问我要问的内容
有些联系人目前正在作为父母,并且应该有一个SecondaryID。如果我有三个联系人,我想为其中两个分配一个等于第三个联系人的contactID的primaryID。我不一定关心哪两个获得了primaryID。
有什么可以想到的方法吗?
编辑:我在下面添加了一个示例图片。我想让第二行和第三行的 primaryID 等于第一行的 contactID 。 (实际上,哪两个获得 contactID 并不重要,只要它的2/3和2获得第三个的contactID。
编辑如果我可以使用其中一个重复项的contactID更新所有重复项的主ID,那么它也会有效。
答案 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