2013-07-31 6 views
9

J'ai une table (SQL Server 2005) de ce format:SQL Server Somme cumulatif par

dummy_id, date_registered, item_id, quantité, prix

et je veux ajouter une nouvelle colonne (cumulative) qui calcule les totaux cumulés de chaque ordre item_id par date_registered comme indiqué:

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 à l'avance

Répondre

17

Dans SQL Server 2005, je referais ce une sous-requête en corrélation:

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; 

Si vous voulez vraiment ajouter ceci dans une table, vous devez modifier la table pour ajouter la colonne puis effectuez une mise à jour . Si la table comporte des insertions et des mises à jour, vous devrez ajouter un déclencheur pour le maintenir à jour. L'obtenir à travers une requête est définitivement plus facile.

Dans SQL Server 2012, vous pouvez le faire en utilisant la syntaxe:

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;