这是我的样本表
create table #t (id int,qty int)
insert into #t values(1,100),(2,200),(3,150),(4,50)
我想要得到这个
id qty total_qty
1 100 100
2 200 300
3 150 450
4 50 500
这不起作用
select a.id,a.qty,sum(b.qty) as total_qty from #t
答案 0 :(得分:4)
你想要一个累积总和。在SQL Server 2012中,您可以直接执行此操作:
select a.id, a.qty, sum(a.qty) over (order by a.id) as total_qty
from #t a;
在早期版本的SQL Server中,您可以使用相关子查询或非等值连接来执行此操作。以下是一个例子:
select t.id, t.qty,
(select sum(t2.qty) from #t t2 where t2.id <= t.id) as total_qty
from #t t;
编辑:
表达式sum(a.qty) over (order by a.id)
是表示累积和的窗口函数。 over
正在说“为每一行做点什么”。它对每一行的作用是取a.qty
的总和。但是,不仅仅是任何总和,一个考虑到排序的总和。 order by
是使这成为累积总和的原因。 (如果没有order by
条款,sum(a.qty) over ()
将返回所有行的总和,作为每行中的附加列。)
答案 1 :(得分:1)
使用加入!
select a.id,a.qty,sum(b.qty) as total_qty from #t a cross join #t b where b.id<=a.id
group by a.id,a.qty
order by a.id