SQL - Suma acumulativa en sql

 
Vista:

Suma acumulativa en sql

Publicado por alberto (1 intervención) el 27/11/2008 14:02:11
Hola buenas tardes, tengo una duda para hacer una consulta y a ver si me podeis ayudar.

He hecho una consulta donde me saca todos los profesores dados de alta por año:
Cantidad año
5 2003
3 2004
2 2005

La tabla original contiene para cada persona, una columna que dice si es profesor, y el año que empezo a ser profesor.
Ahora lo que quiero es que la consulta de antes sea acumulativa, es decir, que en el 2003 la cantidad sea 5, en el 2004 sea 8 (5 del 2003 mas 3 del 2004) y en el 2005 sea 10(la suma de las anteriores)

Alquien me puede ayudar??

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Suma acumulativa en sql

Publicado por Mau (3 intervenciones) el 30/11/2008 20:26:26
Que tal, esta podría ser una solución a lo que necesitas:

select t.anio,
(select sum(cuenta) from #test where anio <= t.anio) cuenta
from #test t
order by t.anio

Donde #test es tu tabla. Esta solución es universal, es decir, independiente del motor de base de datos que utilices, aunque si tienes muchos registros no es una buena opción, porque cada registro estará calculando el segundo campo.

En Oracle es mucho más simple, porque incluye una función que hace el mismo trabajo de forma automática y no tiene problemas de performance con muchos registros. Pero supongo que no usas Oracle, de otro modo te habrías equivocado de foro.

Ahora bien, si tienes el caso donde sean por ejemplo, un millón de registros, entonces te conviene mucho más crear un stored procedure y hacerlo con una tabla temporal. Esto funciona únicamente con SQL Server

CREATE TABLE #Test (anio smallint, cuenta int, acumulado int not null default (0))

INSERT INTO #Test (anio cuenta)
SELECT anio, cuenta
FROM tuTabla
ORDER BY anio

DECLARE @acumulado int
SET @acumulado = 0

UPDATE #Test
SET @acumulado = acumulado = @acumulado + cuenta

SELECT * FROM #Test ORDER BY anio

Esta solución en mi pequeña p4 no tarda más de 5 segundos.

Espero que te haya sido útil la ayuda. Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar