我在联系表中有重复的数据。 使用Rank()函数我正在识别重复项。 我还必须更新子表活动中的联系人ID。
我想通过排名2或以上的排名1的联系人ID更新活动表中的联系人ID。
使用此查询查找重复的联系人
(SELECT
ExternalContactID,
RANK() OVER (PARTITION BY ExternalAccountId, Name, Email, MailingCity,
MailingCountry, MailingState, MailingStreet, Phone ORDER BY
ExternalContactID) AS rank
FROM
contact)
表:联系
ExternalContactID | Rank
101 | 1
102 | 2
子表:活动
ActivityID | ContactID
1 | 101
2 | 102
在删除等级为>的联系人之前1,我需要更新具有等级1联系人ID的子表“活动”。
结果:
删除与id = 102的联系,id = 2的活动记录现在具有联系人id = 101
答案 0 :(得分:0)
您已使用RANK识别重复组以及您希望保留的每组中的重复组。这是您进行自我联接以将每一行与“守护者”(您希望保留的重复组的成员)相关联的机制。
WITH cte AS (
{Query with Rank column}
)
SELECT ...
FROM cte a
INNER JOIN cte b
ON {all the partitioning columns being equal}
AND a.Rank=1
AND b.Rank<>1
使用上面的伪代码,您删除了重复项后,表中的所有行都会连接到将成为“守护者”的行。在UPDATE中加入此结构,将FK设置为与其相关的“守护者”的PK。