May*_*hav 5 sql sql-server sql-server-2008
我对SQL不是很友好所以我需要在表上编写SQL更新/删除查询.要求如下.
表A:
Col1(PK)Col2 Col3数量1 Code1 Value1 5
2 Code2 Value2 2
3 Code1 Value1 3
4 Code3 Value3 8
考虑上表,其中有多个行具有相同的Col2和Col3值.我想编写一个查询,它将删除Col2和Col3的重复组合,并将结果记录的数量相加.
结果应该是这样的:
Col1(PK)Col2 Col3数量1 Code1 Value1 8
2 Code2 Value2 2
4 Code3 Value3 8
您需要分两部分来完成此操作,如果您想确保数据的完整性,则应将这两部分包装在一个事务中。
第一部分更新所需的行' Quantity,第二部分删除现在重复的行。
BEGIN TRANSACTION
UPDATE TableA
SET Quantity=upd.Quantity
FROM TableA a
INNER JOIN (
SELECT MIN(Col1) AS Col1, SUM(Quantity) AS Quantity
FROM TableA
GROUP BY Col2, Col3
) upd
ON a.Col1 = upd.col1
;WITH DELETES
AS
(
SELECT Col1,ROW_NUMBER() OVER (PARTITION BY Col2,Col3 ORDER BY Col1) rn
FROM TableA
)
DELETE FROM TableA WHERE Col1 IN (
SELECT Col1 FROM DELETES WHERE rn>1
)
COMMIT TRANSACTION
Run Code Online (Sandbox Code Playgroud)
实例: http: //www.sqlfiddle.com/#!3/9efa9 /7
(编辑:更新以修复评论中指出的问题)