Накопительная сумма SQL Server по группам
У меня есть таблица (SQL Server 2005) этого формата:
dummy_id, date_registered, 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
Thanx заранее
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;