计算SQL Server中的运行总计

想象一下下表(称为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和上面的“更新技巧”示例



烙印99
浏览 590回答 3
3回答

智慧大石

在SQL Server 2012中,您可以将SUM()与OVER()子句一起使用。select id,        somedate,        somevalue,        sum(somevalue) over(order by somedate rows unbounded preceding) as runningtotalfrom TestTableSQL小提琴
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL