È possibile utilizzare SUM
in una sottoquery co-correlati o CROSS APPLY
come questo
Co-correlato sottoquery
SELECT ID,(SELECT SUM(Qty) FROM B WHERE B.id <= C.id) FROM B as C
ORDER BY ID
Utilizzando CROSS APPLY
SELECT ID,D.Qty FROM B as C
CROSS APPLY
(
SELECT SUM(Qty) Qty
FROM B WHERE B.id <= C.id
)AS D
ORDER BY ID
uscita
1 2
2 9
3 11
4 22
Se si sta utilizzando SQL Server 2012 o superiore, con SUM()
Over()
clausola avrebbe potuto essere utilizzato in questo modo.
SELECT ID, SUM(Qty) OVER(ORDER BY ID ASC) FROM B as C
ORDER BY ID
Modifica
Un altro modo per fare questo in SQL Server 2008 sta usando CTE ricorsiva. Qualcosa come questo.
Nota: Questo metodo si basa sulla risposta da Roman Pekar su questo thread Calculate a Running Total in SQL Server. Sulla base della sua osservazione questo sarebbe un rendimento migliore rispetto subquery correlato co e CROSS APPLY
sia
;WITH CTE as
(
SELECT ID,Qty,ROW_NUMBER()OVER(ORDER BY ID ASC) as rn
FROM B
), CTE_Running_Total as
(
SELECT Id,rn,Qty,Qty as Running_Total
FROM CTE
WHERE rn = 1
UNION ALL
SELECT C1.Id,C1.rn,C1.Qty,C1.Qty + C2.Running_Total as Running_Total
FROM CTE C1
INNER JOIN CTE_Running_Total C2
ON C1.rn = C2.rn + 1
)
SELECT *
FROM CTE_Running_Total
ORDER BY Id
OPTION (maxrecursion 0)
siete alla ricerca di esecuzione totale in SQL Server – Milen
http://sqlfiddle.com/#!6/fa67a/2 la vostra risposta. –