【问题标题】:Merge columns and add values based on duplicate column合并列并根据重复列添加值
【发布时间】:2015-11-19 12:42:52
【问题描述】:

我的 SQL Server 中有我想基于重复的 StartDate 列合并的行。通过合并,我也想

ID     CustomerID     Amount     PurchaseDate     TimeStamp
1      113            20         2015-10-01       0x0000000000029817
2      113            30         2015-10-01       0x0000000000029818

基于上面的示例,我希望有一个列,其中汇总了 Amount 列的值。

ID     CustomerID     Amount     PurchaseDate     TimeStamp
2      113            50         2015-10-01       0x0000000000029818

我不确定我应该如何处理这个问题:

  1. 使用新值创建一个新行,或者;
  2. 更新最新添加的行并将Amount 添加到该行

但首先我想知道如何获取具有重复 StartDate 列值的行

更新:我这里有一个旧值的删除脚本

DELETE FROM Table WHERE ID NOT IN (SELECT MAX(ID) FROM Table GROUP BY CustomerID, PurchaseDate)

【问题讨论】:

    标签: sql-server tsql merge


    【解决方案1】:

    我建议更新最后插入的;

    UPDATE T
    SET Amount = X.Amount
    FROM Table T INNER JOIN (
        SELECT MAX(ID), SUM(Amount)
        FROM Table
        GROUP BY CustomerID, PurchaseDate) X ON T.ID = X.ID)
    

    在这种情况下,我还建议删除旧值

    【讨论】:

    • 嗨,我目前正在使用这个脚本。它确实更新了最新的列来汇总金额。我现在遇到的问题是删除所有其他重复条目
    • 您应该按照 customerid 和 purchaseate 获得最高 ID 分组,并删除所有具有较低 id 和相同 customerid 和 purchaseate 的行
    • @jmc 您在创建脚本以删除旧值时遇到困难吗?
    • 我已经创建了删除旧值的脚本,你可以检查一下。我已经更新了问题
    猜你喜欢
    • 2019-02-14
    • 1970-01-01
    • 2016-07-16
    • 2017-05-28
    • 2012-06-11
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多