Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie berechne ich eine laufende Summe in SQL, ohne einen Cursor zu verwenden?

Vielleicht möchten Sie sich hier das Update für die Lösung lokaler Variablen ansehen:http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005--- the-optimal.aspx

DECLARE @SalesTbl TABLE (DayCount smallint, Sales money, RunningTotal money)

DECLARE @RunningTotal money

SET @RunningTotal = 0

INSERT INTO @SalesTbl 
SELECT DayCount, Sales, null
FROM Sales
ORDER BY DayCount

UPDATE @SalesTbl
SET @RunningTotal = RunningTotal = @RunningTotal + Sales
FROM @SalesTbl

SELECT * FROM @SalesTbl

Übertrifft alle anderen Methoden, hat aber einige Zweifel an der garantierten Zeilenreihenfolge. Scheint aber gut zu funktionieren, wenn die temporäre Tabelle indiziert ist..

  • Verschachtelte Unterabfrage 9300 ms
  • Self Join 6100 ms
  • Cursor 400 ms
  • Aktualisierung der lokalen Variablen 140 ms