Declare @Table table (RowNumber int, Increment int, Score int)
Insert into @Table
values (1, 1, NULL), (2, 100000, NULL), (3, -1, NULL),
(4, 1, NULL), (5, 10, NULL), (6, -1, NULL),
(7, -100000, NULL), (8, -10, NULL)
Update @Table
Set Score = B.Score
From @Table A
Join (Select RowNumber, Score = sum(Increment) over (Order By RowNumber)
from @Table) B on A.RowNumber = B.RowNumber
Select * from @Table
返回
RowNumber Increment score
1 1 1
2 100000 100001
3 -1 100000
4 1 100001
5 10 100011
6 -1 100010
7 -100000 10
8 -10 0
答案 0 :(得分:7)
我刚刚更新了您的UPDATE
声明,试一试这会给出您在问题中描述的预期结果
UPDATE @Table SET Score=(SELECT SUM(Increment)
FROM @Table B
WHERE b.RowNumber <= A.RowNumber)
FROM @Table A
答案 1 :(得分:7)
原始问题的答案是:否。
此查询不在SQL Server 2008上运行。
仅在SQL Server 2012中实施了累积SUM
。ORDER BY
的{{1}}子句中的OVER
。
SUM
您将收到此隐秘错误消息:
Msg 11305,Level 15,State 10,Line 11
并行数据仓库 (PDW)功能未启用。
即使兼容级别设置为SQL Server 2008(100),它也将在SQL Server 2012+上运行。