Ver Mensaje Individual
  #17  
Antiguo 19-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 p.area ,
                sum(P.monto) AS MONTO, 
                sum(case when estado = 'F' then monto_compr else 0 end) AS COMPRA,
               count(case when estado = 'P' then 1 else 0 end) AS EXCEDIDA
from presupuesto p inner join compras c on c.empresa=c.empresa and c.area = p.area and c.ano = p.ano
and p.mes = c.mes AND P.EMPRESA = C.EMPRESA AND P.AREA=C.AREA and p.oficina = c.oficina
where p.mes = '1'
and p.ano =   '2009'
and P.empresa = 'emp1'
and p.oficina = '1'
GROUP BY P.AREA

Bueno,
examina lo que te he marcado en negro. Tiene pinta de que la condicion de la empresa está mal, y por otro lado la oficina no pinta nada en esta guerra - al menos con las tablas de prueba que has aportado -.

Por otro lado, haz lo que te comentaba en un post anterior.
Quita el group by y las funciones de agregado SUM y COUNT. También los CASE. Una vez hecho esto, ¿ la consulta devuelve los registros que debe devolver para sumar y contar lo que debe ? Si no es así, está mal desde el origen. Revisala, y cuando devuelva los registros que tiene que devolver, vuelves a poner las funciones de agregado y el group by.

Ya nos dirás.
Por otro lado, tendrás alguna herramienta para ejecutar la query sin recompilar el programa no ? Me refiero la ibexpert o similar.

Además, no estaría de más que busques información sobre la normalización de las tablas, ya que la estructura que pones no es muy ortodoxa - no lo digo yo, lo dice la teoría de las buenas prácticas - .

Ya nos contarás.

Saludos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita