Somme cumulée distincte

J'ai une vue refv_ActiveOpen qui a SuburbName, Weeks, ServiceCount et de là je veux créer une deuxième vue qui montrera le ServiceCount s'accumulant par semaine. La vue doit avoir des semaines distinctes et un nom de banlieue. Par exemple:

  SuburbName |Weeks|ServiceCount|Accumulative Pretoria |1 |100 |100 Pretoria |2 |30 |130 Johannesburg|1 |30 |30 Johannesburg|2 |20 |50 

Ci-dessus sont les résultats que je veux afficher. Pour chaque banlieue, il devrait y avoir une colonne indiquant les banlieues distinctes et le nombre total de banlieues par semaine. J'ai réussi à get un total cumulatif mais ce n'est pas ce que je cherche. Veuillez aider

ANSI-SQL, devrait fonctionner avec n'importe quel SGBDR:

 SELECT t1.SuburbName, t1.Weeks, t1.ServiceCount, sum(t2.ServiceCount) as Accumulative FROM refv_ActiveOpen t1 INNER JOIN refv_ActiveOpen t2 ON t1.SuburbName = t2.SuburbName -- Same suburb AND t1.Weeks >= t2.Weeks -- All the weeks up to the week from t1. GROUP BY t1.SuburbName, t1.Weeks, t1.ServiceCount 

Cela utilise une auto-jointure pour produire pour chaque ligne de votre table (alias t1 ) l'set des rangées correspondantes pour la même banlieue avec le numéro de semaine identique ou inférieur . Les dernières rangées sont ensuite additionnées pour get le numéro de service accumulé pour les semaines précédentes.

Vous pouvez utiliser la sum et l'ordre par la fonction de fenêtrage

 Select *, accumulative = sum(service count) over(partition by suburb name, weeks order by weeks) from yourtable 

Dans la plupart des bases de données, vous pouvez utiliser la fonction de sum cumulative standard ANSI:

 select t.*, sum(Service_Count) over (partition by SuburbName order by weeks) as accumulative from refv_ActiveOpen t; 

Cela a été pris en charge dans SQL Server depuis la version 2012.