Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment calculer un total cumulé en SQL sans utiliser de curseur ?

Vous voudrez peut-être jeter un œil à la mise à jour de la solution de variable locale ici :http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005--- le-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

Surpasse toutes les autres méthodes, mais a des doutes sur l'ordre des lignes garanti. Semble bien fonctionner lorsque la table temporaire est indexée..

  • Sous-requête imbriquée 9 300 ms
  • Auto-joindre 6 100 ms
  • Curseur 400 ms
  • Mettre à jour la variable locale 140 ms