SQL Server多个运行总计

时间:2010-05-11 16:08:09

标签: tsql sql-server-2008

我有一张这样的表

UserID  Score  Date
5       6      2010-1-1
7       8      2010-1-2
5       4      2010-1-3
6       3      2010-1-4
7       4      2010-1-5
6       1      2010-1-6

我想得到一张这样的表

UserID  Score  RunningTotal Date
5       6      6            2010-1-1
5       4      10           2010-1-3
6       3      3            2010-1-4
6       1      4            2010-1-6
7       8      8            2010-1-2
7       4      12           2010-1-5

谢谢!

2 个答案:

答案 0 :(得分:1)

OraclePostgreSQL甚至MySQL不同,SQL Server没有有效的方法来计算运行总计。

如果每个UserID得分很少,可以使用:

SELECT  userId,
        (
        SELECT  SUM(score)
        FROM    scores si
        WHERE   si.UserID = so.UserID
                AND si.rn <= so.rn
        )
FROM    (
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY UserID) AS rn
        FROM    scores
        ) so
但是,对于较大的表格,这将是非常低效的。

对于较大的表格,您可以使用(上帝帮我)光标。

答案 1 :(得分:0)

这样的事情对你有用吗??

SELECT UserID, Score, 
   (SELECT SUM(Score) 
   FROM TableName innerTable 
   WHERE innerTable.UserID = outerTable.userID 
      AND innerTable.Date <= outerTable.date) AS RunningTotal
FROM TableName outerTable

但是,这假设用户每天不能有多个分数。 (你的PK是什么?)