2013-07-23 9 views
0

je dois développer une requête SQL qui effectue les opérations suivantes:Somme des lignes - requête SQL

 Column A  Column B 

Row1 2861682  sum(Row1 to Row5) 
Row2 2522226  sum(Row2 to Row5) 
Row3 2285983  sum(Row3 to Row5) 
Row4 2096046  sum(Row4 to Row5) 
Row5 1935355  sum(Row5) 

Ce sont les données que j'ai dans une colonne de table.

Maintenant je dois calculer

sum(Row1 to Row5) 
sum(Row2 to Row5) 
sum(Row3 to Row5) 
sum(Row4 to Row5) 
sum(Row5) 

Merci

+4

Quel est le moteur DB utilisez-vous? –

+0

netezza ... merci – Gallop

Répondre

3

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 
+0

Pouvez-vous s'il vous plaît expliquer ce que t et B représentent. La colonne B est représentée en fonction de la sommation – Gallop

+0

@Moonwalk. . . 't' représente votre table. 'A' est la première colonne (semble contenir les valeurs' row1' etc.). 'B' est la deuxième colonne qui semble contenir la valeur que vous voulez additionner. Les tables SQL sont intrinsèquement non ordonnées (en particulier sur un système de base de données parallèle tel que Netezza). Si vous n'avez pas d'identifiant pour la commande (comme un identifiant ou une date de création), la somme cumulée n'a tout simplement aucun sens. –

+0

Salut Gordon - B est la nouvelle colonne.J'ai des données seulement pour une colonne. Seules les valeurs de colonne B doivent être calculées. – Gallop