Совокупная сумма SQL Server по группам

У меня есть таблица (SQL Server 2005) такого формата:

dummy_id, date_registration, item_id, количество, цена

и я хочу добавить новый столбец (кумулятивный), который вычисляет кумулятивные итоги каждого заказа item_id по date_registered, как показано:

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

Заранее спасибо


person PanosPlat    schedule 31.07.2013    source источник


Ответы (1)


В 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;
person Gordon Linoff    schedule 31.07.2013