【问题标题】:SQL--Regroup all the records based on their unique IDSQL--根据唯一 ID 重新组合所有记录
【发布时间】:2013-08-09 00:01:26
【问题描述】:

我有一张如下表:

GroupID     ID      Name   Address   AAA   BBB  CCC    Other Columns
   1      00111     AAA     -----    ---   ---  ---    ------------
   1      00122     BBB     -----    ---   ---  ---    ------------
   1      00133     CCC     -----    ---   ---  ---    ------------
   2      00144     DDD     -----    ---   ---  ---    ------------
   2      00155     EEE     -----    ---   ---  ---    ------------
   3      00111     AAA     -----    ---   ---  ---    ------------
   3      00177     GGG     -----    ---   ---  ---    ------------
   4      00188     PPP     -----    ---   ---  ---    ------------
   4      00199     OOO     -----    ---   ---  ---    ------------
   4      00177     GGG     -----    ---   ---  ---    ------------

所以基本上所有具有相同组 ID 的记录都是潜在的重复记录。具有相同 ID 的记录可能出现在不同的组中。我需要根据ID 重新组合它们,并使它们只在表格中出现一次。

如果ID'00111'在组 1 和组 3 中,则这两个组的记录必须重新组合并具有唯一的 GroupID。请注意,在第 3 组中,ID '00177' 也在第 4 组中,因此第 3 组和第 4 组必须重新组合。

所以结果如下:

GroupID     ID      Name   Address   AAA   BBB  CCC    Other Columns
 1+3+4    00111     AAA     -----    ---   ---  ---    ------------
 1+3+4    00122     BBB     -----    ---   ---  ---    ------------
 1+3+4    00133     CCC     -----    ---   ---  ---    ------------
 1+3+4    00177     GGG     -----    ---   ---  ---    ------------
 1+3+4    00188     PPP     -----    ---   ---  ---    ------------
 1+3+4    00199     OOO     -----    ---   ---  ---    ------------
   2      00144     DDD     -----    ---   ---  ---    ------------
   2      00155     EEE     -----    ---   ---  ---    ------------

这很有挑战性,这个表有超过 300 万条记录,但只有 200 万个唯一 ID。 我正在考虑再添加一列作为Master Group ID 来标记记录并合并它们。但是作为提供的示例,'00111' 在第 1 组和第 3 组中,因此第 1 组和第 3 组必须合并,但在第 3 组中,另一条记录 '00177' 出现在第 4 组中,因此第 1,3 组和第 4 组必须合并。这条大链条似乎永远不会结束。

非常感谢任何建议。

谢谢

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    不确定我是否完全理解了这个问题,但您可以尝试以下方法:

    SELECT SUM(GroupID) AS GroupID, ID, Name, Address, AAA, BBB, CCC, ...
    FROM MyTable
    GROUP BY ID, Name, Address, AAA, BBB, CCC, ...
    

    继续SELECT 列列表以及其余列。

    【讨论】:

    • 谢谢迈克尔,但这仅适用于重复记录,它不会延续该组中的其余记录。示例:sqlfiddle.com/#!3/29d00/1
    • 应该如何“结转”?
    • 抱歉不清楚.. 如我的示例所示,我需要 111,122,133,177,188 和 199 在同一个唯一组 ID 中。 :D
    • 嗯,因为在第 2 组中,这两条记录都没有出现在其他组中。因此它们不需要重新组合,而 ID 为“00199”的“OOO”位于 ID 为“00177”的组中,该组也出现在第 3 组中。所以第 4 组中的所有记录都必须与第 3 组和第 1 组重新组合。这有意义吗..?
    猜你喜欢
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-06
    • 2019-07-06
    • 2021-10-04
    • 1970-01-01
    • 2019-03-08
    相关资源
    最近更新 更多