SQL – 顺序更新问题 – 使用更新数据进行更新

考虑这个表:

create table x (id int, total int, diff int)

这个数据:

[1, 100, 20]
[2, null, 30]
[3, null, -15]
[4, null, 4]
…

我需要根据前一行计算“总计”列.

这意味着最终数据看起来应该是这样的:

[1, 100, 20]
[2, 120, 30]
[3, 150, -15]
[4, 135, 4]
…

这样做最有效的方法是什么?

最佳答案
好的,这是另一种选择.作为一个单独的答案添加,因为它是一个完全不同的方法.

对此的假设是ID中没有间隙 – 这可能不太现实,但它证明了这种方法.如果ID中存在间隙,那么只需对JOIN进行一些调整即可.

DECLARE @Data TABLE (ID INTEGER PRIMARY KEY, Total INTEGER, Diff INTEGER)
INSERT @Data VALUES (1, 100, 20)
INSERT @Data VALUES (2, NULL, 30)
INSERT @Data VALUES (3, NULL, -15)
INSERT @Data VALUES (4, NULL, 4)

DECLARE @PreviousTotal INTEGER
SELECT @PreviousTotal = Total
FROM @Data 
WHERE ID = 1

UPDATE d
SET @PreviousTotal = d.Total = @PreviousTotal + d2.Diff
FROM @Data d
    JOIN @Data d2 ON d.ID = d2.Id + 1

SELECT * FROM @Data 

转载注明原文:SQL – 顺序更新问题 – 使用更新数据进行更新 - 代码日志