【发布时间】:2012-01-03 00:28:34
【问题描述】:
可能重复:
How do I calculate a running total in SQL without using a cursor?
这有点难以解释,所以我会用一个例子来展示我想要的:
假设我们有一个名为 MonthProfit 的表:
[MonthId][Profit]
1, 10 -- January
2, 20 -- February
3, 30
4, 40
5, 50
6, 60
7, 70
8, 80
9, 90
10, 100
11, 110
12, 120 -- December
profit 列代表当月的利润。
但是,如果我们 1 月份有 10 个利润,2 月份有 20 个利润,那么 2 月份我们的总利润是 30。
所以我想创建一个显示以下内容的视图:
[MonthId][Profit][ProfitTotal]
1, 10, 10 -- January
2, 20, 30 -- February
3, 30, 60
4, 40, 100
5, 50, 150
6, 60, 210
7, 70, 280
8, 80, 360
9, 90, 450
10, 100, 550
11, 110, 660
12, 120, 780 -- December
我现在解决它的方法是这样的:
SELECT [MonthId]
,[Profit]
, (SELECT SUM([Profit])
FROM MonthProfit
WHERE [MonthId] <= outer.[MonthId]) as ProfitTotal
FROM MonthProfit as outer
但是,我认为这很慢,因为它必须一直重新计算所有内容,而且对我来说似乎不是很优雅。有没有“好”的方法来做到这一点?
【问题讨论】:
-
只要搜索“Running total SQL”,你就会得到很多点击率。