Ver Mensaje Individual
  #5  
Antiguo 18-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
Estuve mirando este hilo ayer pero no sabía por donde cogerlo.

El problema que veo es que haces un For select, y eso es un for para cada registro de la tabla, después, en su select vuelves a realizar otro select que suma:
Código SQL [-]
SELECT SUM(GS) FROM HONDATA WHERE IDHONDATA = H.IDHONDATA) AS GS

No sé, pero quizás fuese mejor realizar 3 selects distintos obteniendo las sumas:
Código SQL [-]
CREATE PROCEDURE TRAE3 (
 FECHAINI DATE,
 FECHAFIN DATE)
RETURNS (
 GS       FLOAT,
 MEC      INTEGER,
 SER      INTEGER,
 TC       INTEGER)
AS 
BEGIN 

SELECT SUM(GS) FROM HONDATA WHERE IDHONDATA = H.IDHONDATA) as GS
FROM ENCAOR E, HONDATA H
WHERE E.TIPO <> 'C' AND E.FECH BETWEEN :FECHAINI AND :FECHAFIN 
AND E.ORDE = H.ORDE AND EXTRACT(MONTH FROM (H.FECHORDE)) = EXTRACT(MONTH FROM(:FECHAFIN)) 

  and GS is not null
INTO :GS

...
-----------la otra sqls aqui -------

SELECT COUNT(R.IDRETSER) FROM RETMR R AS TC
FROM ENCAOR E, HONDATA H
WHERE R.IDHONDATA = H.IDHONDATA AND R.IDRETSER = 3)  
and E.TIPO <> 'C' AND E.FECH BETWEEN :FECHAINI AND :FECHAFIN 
AND E.ORDE = H.ORDE AND EXTRACT(MONTH FROM (H.FECHORDE)) = EXTRACT(MONTH FROM(:FECHAFIN))
into :TC

--- y después de tener todos los datos, devolvemos un único registro -----
 SUSPEND;
END^
SET TERM ; ^

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita