【问题标题】:Update Multiple Records to a Single Record将多条记录更新为一条记录
【发布时间】:2019-02-18 14:37:57
【问题描述】:

我正在尝试合并具有相同名字、姓氏、SSN 和 DOB 的客户记录。下面是我们客户表的一个小样本,我在其中确定了满足合并标准并应合并的客户。姓名和 SSN 已更改,但过程将保持不变。通过在 FirstName、LastName、SSN 和 DOB 上将 Customers 表连接到自身并使用一些 CROSS APPLYDENSE_RANKLAG 魔术 - 我能够将每个客户记录放在它自己的行中并确定哪些记录应该合并到哪个账户 - 我们决定将记录合并到最大的 CID。

CID      FirstName  LastName    SSN         DOB         MergeToCID  Ranking
5728956  RON        WILLIAMS    111111111   1988-05-17  5884361     1
5884361  RON        WILLIAMS    111111111   1988-05-17  NULL        1
1722065  JOE        SMITH       222222222   1981-01-15  2660126     2
2660126  JOE        SMITH       222222222   1981-01-15  NULL        2
3910776  MARY       JONES       333333333   1966-09-16  4019229     3
4019229  MARY       JONES       333333333   1966-09-16  4106801     3
4106801  MARY       JONES       333333333   1966-09-16  NULL        3

客户的表和列 - FirstNameLastNameSSN 是 varchar 数据类型。

CID (int), FirstName, LastName, SSN, isMerged (bit), mergedTo (int), isActive (bit)

因此,如果我只有 Ron Williams,我可以编写如下更新:

update C
set C.mergedTo = mc.MergeToCID, C.isMerged = 1, C.isActive = 0
from Customers as C
inner join #MergeCustomers as mc on mc.CID = C.CID
where mc.MergeToCID IS NOT NULL;

#MergeCustomers 只是上面提供的示例数据的临时表。

当我们有超过 2 个重复帐户时,我无法弄清楚如何更新客户的记录 - 例如 Mary Jones 示例。

而不是链式合并,我们从 ID 3910776 到 ID 4019229,然后从 ID 4019229 到 ID 4106801 - 3910776 和 4019229 都应该将它们的 mergeTo 列设置为 4106801,但我无法做到这一点。想法?

【问题讨论】:

    标签: tsql sql-update sql-server-2016


    【解决方案1】:

    您可以在 WHERE 子句中添加另一个条件来选择最大 CID:

    update C
    set C.mergedTo = mc.MergeToCID, C.isMerged = 1, C.isActive = 0
    from Customers as C
    inner join #MergeCustomers as mc on mc.CID = C.CID
    where mc.MergeToCID IS NOT NULL
          AND mc.MergeToCID = (SELECT MAX(mcMax.MergeToCID)
                                 FROM #MergeCustomers as mcMax
                                WHERE mc.CID = mcMax.CID);
    

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2016-05-01
      • 2013-05-02
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多