我对SQL不太友好,因此需要在表上编写SQL更新/删除查询。要求如下。
表A:
Col1(PK)Col2 Col3数量1代码1值1 5
2代码2值2 2
3代码1值1 3
4代码3值3 8
考虑上表,其中Col2和Col3的多个行具有相同的值。我想编写一个查询,该查询将删除Col2和Col3的重复组合并求和结果记录的数量。
结果应该是这样的:
Col1(PK)Col2 Col3数量1代码1值1 8
2代码2值2 2
4代码3值3 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
实时示例:http : //www.sqlfiddle.com/#!3/9efa9/7
(编辑:已更新,可解决注释中提到的问题)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句