Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como calculo um total em execução no SQL sem usar um cursor?


Você pode querer dar uma olhada na atualização para a solução de variável local aqui:http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005--- o-ótimo.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 todos os outros métodos, mas tem algumas dúvidas sobre a ordem de linha garantida. Parece funcionar bem quando a tabela temporária é indexada.
  • Subconsulta aninhada 9300 ms
  • Auto-junção 6100 ms
  • Cursor 400 ms
  • Atualização para variável local 140 ms