我有一個看起來像這樣的表/資料集:
headerid personid accountid value
---------------------------------
123 P1 Account1 5000
123 P1 Account2 1000
123 P2 Account1 3000
123 P2 Account2 500
我想用相同 personid (p1) 和 headerid (123) 的 account1 和 account2 的差異來更新 accountid = account1。運行腳本后,生成的資料應如下所示:
headerid personid accountid value
---------------------------------
123 P1 Account1 4000
123 P1 Account2 1000
123 P2 Account1 2500
123 P2 Account2 500
需要注意的是,我需要使用腳本更新所有人的 account1 值。我正在使用 SQL SERVER 2017。
uj5u.com熱心網友回復:
一種選擇是使用條件聚合來確定是否accountid等于Account1,以及視窗函式作為按和列SUM() OVER ()分組headeridpersonid
WITH t2 AS
(
SELECT *,
SUM(CASE WHEN accountid = 'Account1' THEN value ELSE -value END)
OVER(PARTITION BY headerid, personid) AS new_value
FROM t
)
UPDATE t2
SET value = new_value
FROM t2
WHERE t2.accountid = 'Account1'
Demo
uj5u.com熱心網友回復:
您的樣本資料
DROP
TABLE IF EXISTS #mytable;
CREATE TABLE #mytable(
headerid VARCHAR(50) NOT NULL,
personid VARCHAR(50),
accountid VARCHAR(50),
value int
);
INSERT INTO #mytable(headerid,personid,accountid,value) VALUES
('123', 'P1', 'Account1', 5000),
('123', 'P1', 'Account2', 1000),
('123', 'P2', 'Account1', 3000),
('123', 'P2', 'Account2', 500);
您應該將您的表與自身連接,以便按如下方式減去值
UPDATE m1
SET m1.value = m1.value - m2.value
FROM mytable m1
JOIN mytable m2
ON m1.headerid = m2.headerid
AND m1.personid = m2.personid
AND m1.accountid = 'Account1'
AND m2.accountid = 'Account2'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438764.html
