Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在更新中合并两行并求和一些列?_Sql Server_Tsql_Merge_Sql Update - Fatal编程技术网

Sql server 如何在更新中合并两行并求和一些列?

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 |

我使用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,因为它们具有相同的列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?