我有这个表,其中很少有记录共享相同的 sales_key。我需要将金额列更新为 0,除了一条具有 sales_key 的记录。意味着对于每个 sales_key,只有一条记录应该有金额,其他记录需要为零。
我尝试过使用 min 但没有成功。
UPDATE #TEMPSALES2
SET NET_TTL = CASE
WHEN QTY = (SELECT MIN(QTY) FROM #TEMPSALES2 AS t2 WHERE t2.SALES_KEY = #TEMPSALES2.SALES_KEY) AND PRD_CD = (SELECT MIN(PRD_CD) FROM #TEMPSALES2 AS t2 WHERE t2.SALES_KEY = #TEMPSALES2.SALES_KEY) THEN NET_TTL
ELSE 0
END,
NET_TTL_TAX = CASE
WHEN QTY = (SELECT MIN(QTY) FROM #TEMPSALES2 AS t2 WHERE t2.SALES_KEY = #TEMPSALES2.SALES_KEY) AND PRD_CD = (SELECT MIN(PRD_CD) FROM #TEMPSALES2 AS t2 WHERE t2.SALES_KEY = #TEMPSALES2.SALES_KEY) THEN NET_TTL_TAX
ELSE 0
END,
MKT_TAX_AMT = CASE
WHEN QTY = (SELECT MIN(QTY) FROM #TEMPSALES2 AS t2 WHERE t2.SALES_KEY = #TEMPSALES2.SALES_KEY) AND PRD_CD = (SELECT MIN(PRD_CD) FROM #TEMPSALES2 AS t2 WHERE t2.SALES_KEY = #TEMPSALES2.SALES_KEY) THEN MKT_TAX_AMT
ELSE 0
END
如果我们对每个 Sale_Key 组中的记录进行编号,我们可以更新第一个记录之外的任何记录
CREATE TABLE TEMPSALES2
(
SALES_KEY VARCHAR(512),
NET_TTL smallmoney,
NET_TTL_TAX smallmoney,
MKT_TAX_AMT smallmoney,
SEQ INT
);
INSERT INTO TEMPSALES2 (SALES_KEY, NET_TTL, NET_TTL_TAX, MKT_TAX_AMT,SEQ) VALUES
('1', '1.12', '2.12', '3.12',1),
('1', '1.12', '2.12', '3.12',2),
('2', '4.12', '5.12', '6.12',3),
('3', '7.12', '8.12', '9.12',4);
SELECT * FROM TEMPSALES2
--Add row number for Sales_Key column
SELECT *, ROW_NUMBER() OVER(PARTITION BY SALES_KEY ORDER BY SALES_KEY ASC) AS RowNum FROM TEMPSALES2
--Update all rows beyond the first one in each Sales Key group
UPDATE TEMPSALES2
SET NET_TTL =0, NET_TTL_TAX=0, MKT_TAX_AMT=0
WHERE SEQ in
(
SELECT SEQ FROM
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY SALES_KEY ORDER BY SALES_KEY ASC) AS RowNum FROM TEMPSALES2
) t
WHERE ROWNUM > 1
)
SELECT * FROM TEMPSALES2
SALES_KEY | NET_TTL | NET_TTL_TAX | MKT_TAX_AMT | 序列 |
---|---|---|---|---|
1 | 1.1200 | 2.1200 | 3.1200 | 1 |
1 | 0.0000 | 0.0000 | 0.0000 | 2 |
2 | 4.1200 | 5.1200 | 6.1200 | 3 |
3 | 7.1200 | 8.1200 | 9.1200 | 4 |