Ver Mensaje Individual
  #10  
Antiguo 24-01-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Reputación: 22
fjcg02 Va camino a la fama
Aprovechando que no está la jefa, aunque tengo mucho trabajo ....

prueba con esto, no está probado ni depurado pero creo que te puede poner en la pista. Para los puristas, es pseudocódigo sin probar !!
1. Calculamos el saldo hasta la fecha
2. Seleccionamos los trabajos y los pagos, por cada registro calculamos el saldo y lo sacamos.

Notas:
for select ... into variables;
suspend;
hace una select, por cada regsitro obtenido asigna las columnas a las variables, y suspend las presenta.

Por cada registro calculamos el saldo.
Sacamos los resultados

Espero que te sirva.

Código SQL [-]
CREATE OR ALTER PROCEDURE SP_PRUEBA (
    fechaDesde, FechaHasta date,
  idcliente integer)
  returns(
  fecha date,
  articulo varchar(50),
  debe numeric(10,2),
  haber numeric(10,2)
  saldo numeric(10,2)
  )
as
declare variable 
montante numeric(10,2);

begin
  /* Procedure Text */
/* inicializacmos las variables de salida */
  fecha = null;
  articulo='';
  debe= 0;
  haber= 0;
  saldo= 0;

  /* Calculamos los trabajos */
  SELECT SUM(TRABAJO.IMPORTE) FROM TRABAJO
  WHERE IDCLIENTE=:IDCLIENTE AND FECHA < :FechaDesde
  INTO montante;
  saldo= montante;
  /* Calculamos los pagos */
  SELECT SUM(PAGO.IMPORTE) FROM PAGO
  WHERE IDCLIENTE=:IDCLIENTE AND FECHA < :FechaDesde
  INTO montante;
  saldo= saldo - montante;
  /* ya tenemos la primera linea, es decir el saldo hasta la fecha desde, la sacamos */
  suspend;
  
  for select fecha, articulo, debe, haber 
  from (
    /* importes de los trabajos del cliente entre las fechas */
    select fecha, trabajo, importe, 0 
    from trabajo
    where 
      fecha >= :FechaDesde and fecha <= :FechaHasta
      and idcliente=:idCliente
    group by fecha
    UNION
    /* importes de los pagos del cliente entre las fechas */
    select  fecha, articulo, 0, importe
    from pago
    where 
      fecha >= :FechaDesde and fecha <= :FechaHasta 
      and idcliente=:idCliente
    group by fecha
      )
  order by fecha
  into fecha, articulo, debe, haber;
  saldo=saldo +debe-haber;
  /* sacamos los datos por cada registro */
  suspend;  
   
end^
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita