SQL Server按组累计和

Pan*_*lat 13 sql sql-server cumulative-sum

我有一个这种格式的表(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
Run Code Online (Sandbox Code Playgroud)

Thanx提前

Gor*_*off 28

在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;
Run Code Online (Sandbox Code Playgroud)

如果您确实想将其添加到表中,则需要更改表以添加列,然后执行更新.如果表具有插入和更新,则需要添加触发器以使其保持最新.通过查询获得它肯定更容易.

在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;
Run Code Online (Sandbox Code Playgroud)