我有一个临时表(#Temptable3)我正在填充以帮助构建数据集以进行报告。我通过一些试验和错误解决了大多数逻辑步骤,并在此找到了之前问题的答案(谢谢!)然而无法破解最后一点。为简化起见,我从下面的示例数据集中删除了不相关的列:
我目前有:
RowNumber Increment Score
-----------------------------
1 1 NULL
2 100000 NULL
3 -1 NULL
4 1 NULL
5 10 NULL
6 -1 NULL
7 -100000 NULL
8 -10 NULL
我打算得到的是得分列,用“增量之和”列填充并包括它自己的行,例如:
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
我已经尝试过但未能获得各种更新语句,使用自联接,但找不到任何看起来很有希望的东西。如果这还不够,请道歉。如果需要,请提出问题感谢您的帮助。
感谢HABO指针,帮助我找到关于运行总和的问题。 janderssons reply中与前一个问题的链接引导我找到适合我的解决方案:
声明@runningtotal int 设置@runningtotal = 0
更新#TempTable3 设置@runningtotal =得分= @runningtotal +增量
来自#TempTable3
答案 0 :(得分:2)
类似的东西:
SELECT [RowNumber], Increment
, SUM(Increment) OVER(ORDER BY [RowNumber]) AS Score
FROM Your_Table
应该做的伎俩。请参阅here。
对于未来的读者:显然,over
语法在sql server 2012中可用,但不在sum() over()
中。对于替代解决方案(以及更新的更完整解决方案),请参阅@JohnCappelletti的答案。
答案 1 :(得分:2)
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
OR
UPDATE @Table SET Score=(SELECT SUM(Increment)
FROM @Table B
WHERE b.RowNumber <= A.RowNumber)
FROM @Table A
返回
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
答案 2 :(得分:1)
感谢来自HABO的指针,帮助我找到关于运行总和的先前问题。 janderssons reply中与前一个问题的链接引导我找到适合我的解决方案:
声明@runningtotal int set @runningtotal = 0
更新#TempTable3设置@runningtotal =得分= @runningtotal +增量
来自#TempTable3
再次感谢HoneyBadger JohnCappelletti和我一起坚持,我确定错误可能是我的。