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