想象一下下表(称为TestTable):
id somedate somevalue
-- -------- ---------
45 01/Jan/09 3
23 08/Jan/09 5
12 02/Feb/09 0
77 14/Feb/09 7
39 20/Feb/09 34
33 02/Mar/09 6
我想要一个以日期顺序返回运行总计的查询,例如:
id somedate somevalue runningtotal
-- -------- --------- ------------
45 01/Jan/09 3 3
23 08/Jan/09 5 8
12 02/Feb/09 0 8
77 14/Feb/09 7 15
39 20/Feb/09 34 49
33 02/Mar/09 6 55
计算SQL Server中的运行总计
我知道在SQL Server 2000/2005 / 2008中有各种方法可以做到这一点。
我对使用aggregate-set-statement技巧的这种方法特别感兴趣:
INSERT INTO @AnotherTbl(id, somedate, somevalue, runningtotal)
SELECT id, somedate, somevalue, null
FROM TestTable
ORDER BY somedate
DECLARE @RunningTotal int
SET @RunningTotal = 0
UPDATE @AnotherTbl
SET @RunningTotal = runningtotal = @RunningTotal + somevalue
FROM @AnotherTbl
...这非常有效但我听说有这方面的问题,因为你不一定能保证UPDATE语句将以正确的顺序处理行。也许我们可以就这个问题得到一些明确的答案。
但也许人们可以建议其他方式?
编辑:现在使用带有设置的SqlFiddle和上面的“更新技巧”示例
智慧大石
相关分类