将多个记录更新为单个记录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个记录更新为单个记录相关的知识,希望对你有一定的参考价值。

我正在尝试合并具有相同名字,姓氏,SSN和DOB的客户记录。以下是我们的Customers表的一小部分样本,其中我确定了符合合并标准且应合并的客户。名称和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都应该将mergedTo列设置为4106801,但我无法完成此操作。思考?

答案

您可以向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);

以上是关于将多个记录更新为单个记录的主要内容,如果未能解决你的问题,请参考以下文章

SecurityError:replaceState 无法将历史记录更新为在路径、查询或片段以外的组件中不同的 URL

使用 XSLT 将 XML 转换为 CSV,用于在单个标记中以空格分隔的多个记录

如何为单个模型保存多个单独的记录

尽管更新了架构,但 BigQuery 架构错误

Rails 3中单个记录的多个外键?

使用 VBA 将 MS Access 记录集导出到 Excel 中的多个工作表/选项卡会生成只读文件