sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo calculo un total acumulado en SQL sin usar un cursor?

Es posible que desee echar un vistazo a la actualización de la solución de variables locales aquí:http://geekswithblogs.net/Rhames/archive/2008/10/28/calculating-running-totals-in-sql-server-2005--- el-óptimo.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 a todos los demás métodos, pero tiene algunas dudas sobre el orden de fila garantizado. Sin embargo, parece funcionar bien cuando la tabla temporal está indexada.

  • Subconsulta anidada 9300 ms
  • Unión automática 6100 ms
  • Cursor 400ms
  • Actualización a variable local 140 ms