2010-05-04 3 views
4

En gros, ayant ce tableau:requête SQL: SUM valeurs jusqu'à l'enregistrement en cours

12.10 
2.35 
21.45 
35.26 

Je veux, dans chaque enregistrement, calculer la somme de tous les records précédents, comme ceci:

12.10 | 12.10 
2.35 | 14.45 
21.45 | 35.90 
35.26 | 71.16 
+1

Comment savez-vous dans quel ordre ils devraient se résumer? –

+0

Eh bien c'est la chose. Habituellement, je les commande par date (il y a un champ de date), mais certains enregistrements ont la même date. Est-il possible de le faire avec quelque chose comme ROW_NUMBER()? – djeidot

+0

sinon, supposons simplement qu'il y a un champ ID et un ordre par celui-là. – djeidot

Répondre

2

Cela s'appelle un total cumulé.

Si vous avez une colonne datetime vous pouvez utiliser quelque chose comme ceci:

SELECT t1.id, t1.transactiondatetime, amount, 
(
SELECT SUM(amount) 
FROM dbo.table1 as t1 
WHERE t1.transactiondatetime <= t0.transactiondatetime 
) AS balance 
FROM dbo.table1 AS t0 
+0

Je vais aller avec celui-ci parce qu'il évite la clause GROUP BY. – djeidot

3

en supposant que vous avez deux colonnes, une clé primaire appelée id et une colonne appelée value vous pouvez utiliser ceci:

SELECT T1.id, SUM(T2.value) 
FROM table1 T1 
JOIN table1 T2 
ON T2.id <= T1.id 
GROUP BY T1.id 

Si vous n'avez pas d'identifiant unique (pourquoi pas?), Vous pouvez utiliser ROW_NUMBER pour en créer un.