簡體   English   中英

編寫SQL查詢以查詢和更新同一個表

[英]Writing SQL Query to query and update same table

我對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

用這個:

  select *
    from (select *, sum(Quantity) over (partition by col2,col3) as Quantity
          from tableA
         ) t

一種選擇是只SELECT你要到一個新表的結果集,然后滴上表:

CREATE TABLE A_new(Col1 INT PRIMARY KEY,
                   Col2 varchar(255),
                   Col3 varchar(255),
                   Quantity INT);

INSERT INTO A_new (Col1, Col2, Col3, Quantity)
SELECT MIN(Col1) AS Col1, Col2, Col3, SUM(Quantity) AS Quantity
FROM A
GROUP BY Col2, Col3

接下來,您可以刪除表A並將A_new重命名為A

DROP TABLE A
sp_rename A_New, A

您需要分兩部分進行此操作,如果要確保數據的完整性,則應將兩部分包裝在事務中。

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

(編輯:更新以修復評論中注明的問題)

對於第一個Update步驟(假設表A的名稱為Table_1):

Update Table_1 set Quantity = t.total 
from Table_1 As p inner join 
(select Min(Col1) as Col1,SUM(quantity) as total from Table_1 group by Col2,Col3) as t
on p.Col1=t.Col1

這將更新具有多個SUM數量的多行的每一行。

那么你可以刪除其code2具有相同值的同一行:

WITH CTE AS(
   SELECT 
       RN = ROW_NUMBER()OVER(PARTITION BY Col2,Col3 ORDER BY Col2,Col3)
   FROM Table_1
)
DELETE FROM CTE WHERE RN > 1;

對不起,我以為Col2與Col3總是一樣的。 *我已經編輯了我的陳述。 如果你有超過1行,它可以刪除所有,除了第一行。

請執行以下查詢:

SELECT 
    Col2,
    Col3,
    SUM(Quantity) 
FROM table_1
GROUP BY
    Col2,
    Col3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM