Można użyć SUM
w podkwerendzie związanych z równoległym lub CROSS APPLY
jak ten
związane CO-Podkwerenda
SELECT ID,(SELECT SUM(Qty) FROM B WHERE B.id <= C.id) FROM B as C
ORDER BY ID
Korzystanie 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
Output
1 2
2 9
3 11
4 22
Jeśli uzywasz SQL Server 2012 lub nowszy, SUM()
z Over()
klauzuli mogły być używane w ten sposób.
SELECT ID, SUM(Qty) OVER(ORDER BY ID ASC) FROM B as C
ORDER BY ID
Edit
Innym sposobem, aby to zrobić w SQL Server 2008 korzysta rekurencyjne CTE. Coś takiego.
Uwaga: Metoda ta opiera się na odpowiedź, Roman Pekar na tym wątku Calculate a Running Total in SQL Server. Na podstawie jego obserwacji byłoby to skuteczniejsze niż związane współpracy podzapytania i CROSS APPLY
zarówno
;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)
szukasz działa łącznie w serwerze sql – Milen
http://sqlfiddle.com/#!6/fa67a/2 odpowiedź. –