sql >> Databasteknik >  >> RDS >> Sqlserver

Hur beräknar jag en löpande summa i SQL utan att använda en markör?

Du kanske vill ta en titt på uppdateringen till lokal variabellösning här: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

Överträffar alla andra metoder, men har vissa tvivel om garanterad radordning. Verkar dock fungera bra när temptabellen är indexerad...

  • Inkapslad underfråga 9300 ms
  • Gå med själv 6100 ms
  • Markör 400 ms
  • Uppdatera till lokal variabel 140 ms


  1. Hur man formaterar datum i Oracle

  2. Effektiv övervakning av MySQL med SCUMM Dashboards:Del ett

  3. Slinga över arraydimension i plpgsql

  4. Motsvarande funktion för DATEADD() i Oracle