PDA

Ver la Versión Completa : acumulados


haron
22-09-2003, 14:12:36
hola a todos.

tengo la siguiente consulta:


select
cantidad,
(select sum(cantidad)
from tabla
where cantidad<=t.cantidad) as acumulado
from tabla t
order by cantidad


esta consulta puede mostrar algo parecido a esto:


cantidad - acumulado
---------------------------
1 - 1
2 - 3
4 - 7
6 - 13
9 - 21


como veis en la columna 'acumulado' se va acumulando los numeros que aparecen en la columna 'cantidad'.

lo que quiero es hacer la misma consulta pero mas sencilla. me da la sensacion de que la consulta anterior es demasiado costosa.

alguna idea?

javiermorales
26-09-2003, 14:28:51
Sin utilizar subquerys la consulta sería la siguiente:

SELECT a.CANTIDAD, Sum(b.CANTIDAD) AS Suma
FROM TABLA AS a, TABLA AS b
WHERE b.CANTIDAD <= a.CANTIDAD
GROUP BY a.CANTIDAD;

Para asegurarnos de que el orden será el correcto también prodríamos poner:

SELECT a.CANTIDAD, Sum(b.CANTIDAD) AS Suma
FROM TABLA AS a, TABLA AS b
WHERE b.CANTIDAD <= a.CANTIDAD
GROUP BY a.CANTIDAD
ORDER BY a.cantidad;

Espero que te sirva. un saludo.

haron
26-09-2003, 18:27:38
pues gracias por todo.

al final lo he hecho asi:


CREATE PROCEDURE PRUEBA
RETURNS (
FECHA_MOVIMIENTO DATE,
CANTIDAD INTEGER,
ACUMULADO INTEGER)
AS
begin
acumulado=0;
for select fecha_movimiento, cantidad
from movimientos
into :fecha_movimiento, :cantidad do
begin
acumulado=acumulado+cantidad;
suspend;
end
end


el problema principal era que para cada fila nueva no es necesario volver a calcular el acumulado, ya que parte se ha calculado en la fila anterior.

podemos hacemos lo siguiente:

select *
from prueba

el procedimiento almacenado se comporta como si fuese una tabla!