web-dev-qa-db-fra.com

Somme cumulative SQL Server par groupe

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

id_dummy, date_registered, item_id, quantité, prix

et je veux ajouter une nouvelle colonne (cumulative) qui calcule les totaux cumulatifs de chaque commande 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

Merci d'avance

13
PanosPlat

Dans SQL Server 2005, je le ferais en utilisant une sous-requête corrélée:

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 souhaitez réellement l'ajouter à un tableau, vous devez modifier le tableau pour ajouter la colonne, puis effectuer une mise à jour. Si le tableau comporte des insertions et des mises à jour, vous devrez ajouter un déclencheur pour le maintenir à jour. Il est certainement plus facile de passer à travers une requête.

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;
28
Gordon Linoff