Sql server 如何在更新中合并两行并求和一些列?
我使用SQL Server,仅当多行在两个特定列(在我的示例中为Col_01和Col_02)中具有相同的值时,才需要合并多行。 当我合并它们时,我必须对一些列求和(在我的示例中是Col_03和Col_04) 我认为一个例子会更加明确。这是我的桌子:Sql server 如何在更新中合并两行并求和一些列?,sql-server,tsql,merge,sql-update,Sql Server,Tsql,Merge,Sql Update,我使用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 |
| 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,因为它们具有相同的列01和列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)的行并保留其他行。你能帮我做这个吗?试试这个:
UPDATE T SET
T.Col_03 = G.Col_03,
T.Col_04 = G.Col_04
FROM Table AS T INNER JOIN
(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) AS G
ON G.ID = T.ID
试试这个:
UPDATE T SET
T.Col_03 = G.Col_03,
T.Col_04 = G.Col_04
FROM Table AS T INNER JOIN
(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) AS G
ON G.ID = T.ID
所以您实际上需要从原始表中删除一些行。使用
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
所以您实际上需要从原始表中删除一些行。使用
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
您可以使用join进行更新。顺便说一句,您需要更新哪个ID?您可以使用join进行更新。顺便问一下,您需要更新哪个ID?