2013-07-31 12 views
9

Ho una tabella (SQL Server 2005) di questo formato:SQL Server Somma cumulativa dal Gruppo

dummy_id, date_registered, item_id, quantità, prezzo

e voglio aggiungere una nuova colonna (cumulativo) che calcola i totali cumulativi di ogni ordine item_id da date_registered come mostrato:

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 

Grazie in anticipo

01.235.164,106174 millions

risposta

17

In SQL Server 2005, vorrei fare questo usando una subquery correlata:

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; 

Se realmente volete aggiungere questo in una tabella, è necessario modificare la tabella per aggiungere la colonna e poi fare un aggiornamento . Se la tabella contiene inserimenti e aggiornamenti, sarà necessario aggiungere un trigger per mantenerlo aggiornato. Ottenere attraverso una query è sicuramente più facile.

In SQL Server 2012, è possibile farlo utilizzando la sintassi:

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;