编写SQL查询以查询和更新同一个表

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

Jam*_*iec 2

您需要分两部分来完成此操作,如果您想确保数据的完整性,则应将这两部分包装在一个事务中。

第一部分更新所需的行' 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

(编辑:更新以修复评论中指出的问题)