Ver Mensaje Individual
  #8  
Antiguo 17-01-2009
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
Código SQL [-]
select area, sum(monto),
SUM( CASE WHEN (OFICINA =:SCOMBOBOX3.TEXT AND ESTADO ='F') then MONTO_COMPR ELSE 0 END) AS COMPRAS,
COUNT( CASE WHEN (OFICINA =:SCOMBOBOX3.TEXT AND ESTADO ='P') THEN ESTADO ELSE 0 END) AS PENDIENTES 
from PRESUPUESTO P, COMPRAS C
where  P.EMPRESA=C.EMPRESA AND P.ANO = C.ANO AND P.MEs=C.MES
AND P.EMPRESA =:EMPRESA
AND P.ano=:ano
AND P.mes=:mes
AND P.OFICINA =:OFI

group BY AREA

Hola, prueba esto a ver.

1.- Relacionamos las tablas por campos comunes, porque si se hace un producto cartesiano de las tablas el nº de registros leidos se eleva exponencialmente, por lo que la demora de la obtención de los resultados también se dispara.
where P.EMPRESA=C.EMPRESA AND P.ANO = C.ANO AND P.MEs=C.MES

2.- Para sumar o contar sólamente los registros que queremos y no todos, usamos el CASE
COUNT ( -- Cuenta los registros que
CASE -- cumplan esta condición
WHEN (OFICINA =:SCOMBOBOX3.TEXT AND ESTADO ='F') --si la cumplen,
THEN suma el campo MONTO_COMPR ( importe comprado)
ELSE suma 0
END
)

3.- Ponemos los parámetros correspondientes
AND P.EMPRESA =:EMPRESA
AND P.ano=:ano
AND P.mes=:mes
AND P.OFICINA =:OFI

Estoy suponiendo que :SCOMBOBOX3.TEXT y :OFI son parametros diferentes, y logicamente SCOMBOBOX3.TEXT se debe asignar como parámetro - es por la hora , que tengo frito el cerebelo -

Ya tienes para romperte la cabeza un rato.

Lo de las bodegas es parecido, pero más largo, y no me meto con ello porque no es hora de emborracharse

Un saludo, .. ya nos dirás.
PD: Hay algun error de sintaxis, pero lógicamente, te toca hacer algo de curro
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita