Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come faccio a calcolare un totale parziale in SQL senza utilizzare un cursore?

Potresti voler dare un'occhiata all'aggiornamento alla soluzione della variabile locale qui: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

Supera tutti gli altri metodi, ma nutre alcuni dubbi sull'ordine delle righe garantito. Sembra funzionare bene quando la tabella temporanea è indicizzata però..

  • Subquery nidificata 9300 ms
  • Auto join 6100 ms
  • Cursore 400 ms
  • Aggiorna alla variabile locale 140 ms