Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Iniciar sesiónIniciar sesiónCrear cuentaCrear cuenta

SQL - Suma acumulativa en sql

  Imprimir  
Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:

Suma acumulativa en sql

Autor:alberto (1 intervención)
Fecha: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
Responder
información
Otras secciones de LWP con contenido similar...
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:

RE:Suma acumulativa en sql

Autor:Mau (3 intervenciones)
Fecha:30/11/2008 20:26:26
Url:
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!
Comentar