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

Gil*_*tal 5 sql t-sql sql-server-2005

考虑这个表:

create table x (id int, total int, diff int)
Run Code Online (Sandbox Code Playgroud)

这个数据:

[1, 100, 20]
[2, null, 30]
[3, null, -15]
[4, null, 4]
…
Run Code Online (Sandbox Code Playgroud)

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

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

[1, 100, 20]
[2, 120, 30]
[3, 150, -15]
[4, 135, 4]
…
Run Code Online (Sandbox Code Playgroud)

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

Ada*_*Dev 2

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

这样做的假设是 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 
Run Code Online (Sandbox Code Playgroud)