我有一张这样的表
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
谢谢!
答案 0 :(得分:1)
与Oracle
,PostgreSQL
甚至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是什么?)