我有一个这种格式的表(SQL Server 2005):
dummy_id,date_registered,item_id,数量,价格
并且我想添加一个新列(累积),它按date_registered计算每个item_id订单的累计总数,如下所示:
dummy_id date_registered item_id quantity price cumulative
1 2013-07-01 100 10 34.5 10
2 2013-07-01 145 8 2.3 8
3 2013-07-11 100 20 34.5 30
4 2013-07-23 100 15 34.5 45
5 2013-07-24 145 10 34.5 18
提前完成
答案 0 :(得分:25)
在SQL Server 2005中,我会使用相关子查询来执行此操作:
select dummy_id, date_registered, item_id, quantity, price,
(select sum(quantity)
from t t2
where t2.item_id = t.item_id and
t2.date_registered <= t.date_registered
) as cumulative
from table t;
如果您确实想将其添加到表中,则需要更改表以添加列,然后进行更新。如果表具有插入和更新,则需要添加触发器以使其保持最新。通过查询获得它肯定更容易。
在SQL Server 2012中,您可以使用以下语法执行此操作:
select dummy_id, date_registered, item_id, quantity, price,
sum(quantity) over (partition by item_id order by date_registered) as cumulative
from table t;