2013-07-31 16 views
9

Mam tabeli (SQL Server 2005) o następującym formacie:SQL Server Cumulative Sum przez Grupę

dummy_id, date_registered, item_id, ilość, cena

i chcę dodać nową kolumnę (łączny), który oblicza sumaryczne każdego zamówienia iTEM_ID przez date_registered jak pokazano poniżej:

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 wcześniej

Odpowiedz

17

W SQL Server 2005, chciałbym to zrobić za pomocą skorelowane podzapytanie:

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; 

Jeśli rzeczywiście chcesz dodać to do tabeli, trzeba zmienić tabelę, aby dodać kolumnę, a następnie wykonać aktualizację . Jeśli tabela zawiera wstawki i aktualizacje, musisz dodać wyzwalacz, aby był aktualny. Przejście przez zapytanie jest zdecydowanie łatwiejsze.

W SQL Server 2012, można to zrobić za pomocą składni:

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;