我有一些按月排序的数据。我想要做的是获得一个总计;但是,当月的总和取决于上个月的总和。 IE(当月总计)+(上个月的总和)。我有这样的数据:
DATE Amount 04/2016 10.00 04/2016 25.00 05/2016 10.00 05/2016 15.00 06/2016 1.00 ...
这样总计就会产生
DATE Totals 04/2016 35.00 05/2016 60.00 06/2016 61.00 ...
让我们说模式是umonth,表数据中的数量。我想弄清楚这个
Select umonth, LAG(SUM(Amount)) Over (Partition By umonth Order by umonth) Total from data
我知道这不会起作用,因为Sum(Amount)
不是前一个月的总和+总和。救命。这是存储过程的情况吗?这样我就可以将@prevTotal设置为用游标计算到@currTotal - 请原谅我的粗言秽语。
这是在MSSQL 2012数据库上。
答案 0 :(得分:5)
您可以使用聚合和累积总和来执行此操作:
select umonth,
sum(sum(amount)) over (order by umonth) as Totals
from data
group by umonth;
答案 1 :(得分:1)
在sql-server 2008中测试并运行。
declare @data table(Date date, amount float)
insert into @data
values('04/01/2016',10.00),
('04/01/2016',25.00),
('05/01/2016',10.00),
('05/01/2016',15.00),
('06/01/2016',1.00)
select Date, (select sum(amount) from @data d2 where d2.Date <=d1.Date) as runningTotal
from @data d1
group by date
2012年,我相信你可以做这样的事情。
select Date, SUM(amount) over(order by Date ROWS UNBOUNDED PRECDING) as runningtotal
from @date
group by Date
答案 2 :(得分:0)
使用无限制的LAG()结束。一旦项目范围发生显着变化,条件不再需要复杂的滚动总数,这个问题就变成了一个静音问题,允许简单的滚动总数(2012年引入了LAG()和LEAD()函数,使滚动总数更容易,在我看来)
感谢您之前的建议。