Le formulaire standard SQL pour celui-ci utilise une sous-requête corrélative:
select t.*,
(select sum(B)
from t t2
where t2.A >= t.A
) as TheSum
from t;
Certaines bases de données prennent également en charge les fonctions de fenêtre/d'analyse qui permettent cumulative sommes.
EDIT:
Netezza est l'une des bases de données qui prennent en charge les sommes cumulées à l'aide des fonctions de fenêtre (grâce à son héritage Postgres, j'imagine). Vous pouvez également exprimer cela comme:
select t.*,
sum(B) over (order by A desc) as TheSum
from t
EDIT II:
Je ne dispose pas d'une base de données Netezza pour tester, mais elle a la colonne RowId
. Vous pourriez être capable d'utiliser ceci, bien que je ne puisse trouver aucune documentation qui garantisse son augmentation monotone. En fait, je suis à peu près sûr que pour une charge parallèle, le rowid ne serait pas assigné de façon monotone.
La requête ressemblerait à ceci:
select t.*,
sum(B) over (order by rowid desc) as TheSum
from t
Quel est le moteur DB utilisez-vous? –
netezza ... merci – Gallop