Je ne comprends pas le bug de ce code
ID AccountID Quantity
1 1 10 Sum = 10
2 1 5 = 10 + 5 = 15
3 1 2 = 10 + 5 + 2 = 17
4 2 7 = 7
5 2 3 = 7 + 3 = 10
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT,
FROM tCariH
Il semble que vous vous attendiez à ce que la requête renvoie des totaux en cours d'exécution, mais elle doit vous avoir donné les mêmes valeurs pour les deux partitions de AccountID
.
Pour obtenir des totaux cumulés avec SUM() OVER ()
, vous devez ajouter un ORDER BY
sous-clause après PARTITION BY …
, comme ça:
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY ID)
Mais rappelez-vous, tous les systèmes de base de données ne prennent pas en charge ORDER BY
dans la clause OVER
d'une fonction d'agrégation de fenêtres. (Par exemple, SQL Server ne l'a pas pris en charge jusqu'à la dernière version, SQL Server 2012.)
si vous utilisez SQL 2012, vous devriez essayer
SELECT ID,
AccountID,
Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ORDER BY AccountID rows between unbounded preceding and current row ) AS TopBorcT,
FROM tCariH
si disponible, meilleure commande par colonne de date.
La requête serait comme ceci:
SELECT ID, AccountID, Quantity,
SUM(Quantity) OVER (PARTITION BY AccountID ) AS TopBorcT
FROM #Empl ORDER BY AccountID
Partition par des œuvres comme group by. Ici, nous regroupons par AccountID donc la somme correspondrait à AccountID.
Premier premier cas, AccountID = 1, puis somme (quantité) = 10 + 5 + 2 => 17 & Pour AccountID = 2, puis somme (Quantité) = 7 + 3 => 10
donc le résultat apparaîtrait comme attaché instantané .