gpt4 book ai didi

sql-server - 如何合并两行并对 UPDATE 中的某些列求和?

转载 作者:行者123 更新时间:2023-12-05 02:23:13 25 4
gpt4 key购买 nike

我使用 SQL Server,只有当它们在两个特定列(在我的示例中为 Col_01 和 Col_02)中具有相同值时,我才需要合并多个行。当我合并它们时,我必须对一些列求和(在我的示例中为 Col_03 和 Col_04)。

我认为一个例子会更明确。这是我简化的表格:

| ID  | Col_01 | Col_02 | Col_03 | Col_04  |
| 1 | ABC | DEF | 2 | 2 |
| 2 | ABC | DEF | 1 | 0 |
| 3 | DEF | GHI | 0 | 2 |
| 4 | ABC | GHI | 1 | 0 |
| 5 | JKL | GHI | 0 | 2 |

这是我更新后想要的:

| ID  | Col_01 | Col_02 | Col_03 | Col_04  | 
| 2 | ABC | DEF | 3 | 2 |
| 3 | DEF | GHI | 0 | 2 |
| 4 | ABC | GHI | 1 | 0 |
| 5 | JKL | GHI | 0 | 2 |

我合并了 ID 1 和 ID 2,因为它们具有相同的 Col_01 和相同的 Col_02。

我试过这样的查询

SELECT MAX(ID), Col_01, Col_02, SUM(Col_03), SUM(Col_04)
FROM Table
GROUP BY Col_01, Col_02

我得到了行合并的内容,但我丢失了未合并的行。

我不知道如何在 UPDATE 查询中正确使用它,以便合并具有相同行(Col_01、Col_02)并保留其他行。你能帮我做这个吗?

最佳答案

因此您实际上需要从原始表中删除一些行。为此使用 MERGE 语句:

MERGE Table tgt
USING (SELECT MAX(ID) as ID, Col_01, Col_02, SUM(Col_03) AS Col_03, SUM(Col_04) AS Col_04
FROM Table
GROUP BY Col_01, Col_02) src ON tgt.ID = srs.ID
WHEN MATCHED THEN
UPDATE
SET Col_03 = src.Col_03, Col_04 = src.Col_04
WHEN NOT MATCHED BY SOURCE THEN
DELETE

关于sql-server - 如何合并两行并对 UPDATE 中的某些列求和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24530993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com