【问题标题】:Sum data and merge results by updating table通过更新表格汇总数据并合并结果
【发布时间】:2022-07-11 21:14:47
【问题描述】:

我有一个包含以下数据的表格:

表1

UniqueKey Text A Text B Value 1 Value 2
Key1 ABC ABC 2 3
Key2 DEF GHI 3 4
Key3 STE GGE 5 5
Key2 DEF GHI 3 4
Key2 DEF GHI 5 7
Key1 ABC ABC 3 7

使用键 UniqueKey 我想在列 Value 1 和 Values 2 中添加值,以便每个唯一键在我的表中只存在一次。

Table1 应如下所示:

UniqueKey Text A Text B Value 1 Value 2
Key1 ABC ABC 5 10
Key2 DEF GHI 11 15
Key3 STE GGE 5 5

我已经做了以下考虑。我可以使用 group by 和 sum 命令根据需要添加列。 我无法将这些更改保存在表中并删除冗余列。到目前为止,我只在两个不同的表上使用了合并命令。

select
    UniqueKey,
    sum(Value1) Value1,
    sum(Value2) Value2
from
    Table1
group by
    UniqueKey

有人有想法吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    您需要将其他 2 列 Text A 和 Text B 按列分组。

    SELECT UniqueKey, [Text A], [Text B], SUM([Value 1]) AS Val1, SUM([Value 2]) AS Val2
    FROM Table1
    GROUP BY UniqueKey, [Text A], [Text B]
    

    如果你想把这些数据放到Table1中,你可以把上面查询的结果保存到一个临时表中,删除Table1中的数据,然后将临时表中的数据重新插入到Table1中。

    -- Save the data into temp table #Table1
    SELECT UniqueKey, [Text A], [Text B], SUM([Value 1]) AS Val1, SUM([Value 2]) AS Val2 INTO #Table1
    FROM Table1
    GROUP BY UniqueKey, [Text A], [Text B]
    GO
    
    -- Delete the data in Table1
    DELETE FROM Table1
    GO
    
    -- Re-insert the data from the temp table #Table1 into Table1
    INSERT INTO Table1 (UniqueKey, [Text A], [Text B], [Value 1], [Value 2])
    SELECT UniqueKey, [Text A], [Text B], [Value 1], [Value 2]
    FROM #Table1
    GO
    

    【讨论】:

    • 请注意,如果用户想让Table1 强制唯一性,他们将不得不修改表的定义以包含主键约束或唯一索引。
    【解决方案2】:

    您可以使用当前查询创建一个新表

    SELECT UniqueKey, SUM(Value1) Value1, SUM(Value2) Value2
      INTO Table2
      FROM Table1
     GROUP BY UniqueKey
    

    删除原始来源

    DROP TABLE Table1
    

    将新名称重命名为原始名称

    sp_rename 'Table2', 'Table1'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多