2012-08-09 3 views
0

Possible Duplicate:
Calculate a Running Total in SqlServerrequête TSQL pour "valeur accumulée"

Je suis nouveau à SQL. Cette question semble très basique mais je ne pouvais pas trouver la réponse, peut-être que je ne suis pas le bon mot-clé.

Dans le serveur SQL 2008 R2 J'ai une table comme ceci:

Date  Value 
--------------- 
2012-1-1 100 
2012-1-2  50 
2012-1-4 200 

Je veux créer une vue avec la valeur accumulée, comme ceci:

Date  Total 
--------------- 
2012-1-1 100 
2012-1-2 150 
2012-1-4 350 

Comment dois-je faire?

+2

@KenWhite, merci pour l'info, il est exactement ce que je cherche. Mais s'il vous plaît ne présumez pas que je n'ai pas essayé de chercher. En tant que non-anglophone et nouveau à SQL, j'ai essayé chaque mot que je pouvais penser y compris "rollup", "accumulé", "somme historique", etc. Je suppose que depuis que je l'ai réalisé, ma question aurait dû être "Quelle est la terminologie de [cette chose] dans le monde SQL". –

+1

Vous avez absolument raison - je n'aurais pas dû faire cette présomption. J'ai vu 'running-total' dans l'étiquette, et j'ai fait l'hypothèse (et nous savons tous ce que cela signifie) que vous l'aviez mise là. Mes excuses. : --( –

Répondre

2

Cela devrait obtenir le total en cours d'exécution. essayez celui-ci:

SELECT dateHere, 
     total, 
     total + COALESCE(
         (
          SELECT SUM(total) 
          FROM myTable b 
          WHERE b.dateHere < a.dateHere 
         ), 0) AS RunningTotal 
FROM  myTable a 
ORDER BY dateHere 

SQLFiddle Demo

+0

Puis-je l'utiliser comme définition de vue? J'ai une erreur d'exécution SQL: Syntaxe incorrecte près de 'ORDERBY'. (J'ai remplacé "myTable" par "dbo.MyTable") –

+0

'ORDERBY' doit être écrit comme deux mots séparés' Vous pouvez certainement créer une vue à ce sujet –

+0

pouvez-vous poster votre nouvelle requête? Assurez-vous de changer les colonnes avec vos propres noms de colonnes –

1

Voici une façon de le faire avec une sous-requête corrélative:

select t.date, t.value, 
     (select sum(t2.value) 
     from t t2 
     where t2.date <= t.date 
     ) as cumvalue 
from t