Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   acumulados (https://www.clubdelphi.com/foros/showthread.php?t=3844)

haron 22-09-2003 14:12:36

acumulados
 
hola a todos.

tengo la siguiente consulta:

Código:

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:

Código:

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:
Código:

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:
Código:

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:

Código:

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!


La franja horaria es GMT +2. Ahora son las 01:10:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi