PDA

Ver la Versión Completa : Tablas relacionadas por una campo en comun


mjjj
30-09-2008, 23:13:54
Hola yo denuevo por aca, aer si me pueden ayudar con un codigo SQL.

Tengo esto andando, y funcionando bien

select DISTINCT AREA, sum(monto), sum(original) FROM presupuesto
where empresa ='MAT'
group by area


Lo que quiero hacer es agregar una cuarta columna con la suma que exprese lo que tengo en este otro codigo


select DISTINCT AREA, sum(unitario * unidades) FROM detfactura
where empresa ='MAT'
group by area


Estas tablas estan asociadas por el campo AREA.
Lo que necesito es que me genera una lista de todas las distintas area con sus respectivos montos sumados (monto, original, unitario * unidades).

Se podra hacer esto.. como?

IgnacioHaro
01-10-2008, 01:04:55
yo lo haria de esta forma:


select DISTINCT p.AREA, sum(p.monto), sum(p.original), t.total
FROM presupuesto as p
LEFT JOIN (
select DISTINCT AREA, sum(unitario * unidades) as total
FROM detfactura
where empresa ='MAT'
group by area
) as t ON (p.area=t.area)
where p.empresa ='MAT'
group by p.area



espero te sirva, saludos ...

hecospina
01-10-2008, 13:21:19
Me parece mas sencillo asi
select DISTINCT p.AREA, sum(p.monto), sum(p.original), sum(d.unitario * d.unidades) FROM presupuesto p
inner join detfactura d on (p.area=d.area)
where empresa ='MAT'
group by p.area

puedes cambiar el inner por un left
suerte:)

mjjj
01-10-2008, 17:26:20
hice algunas modificaciones y quedo funcionando cno este codigo


select DISTINCT p.AREA, sum(p.monto), sum(p.original), SUM(d.unitario * d.unidades)/COUNT(P.AREA) FROM presupuesto p
inner join detfactura d on (p.area=d.area)
where P.empresa ='MAT' AND D.empresa ='MAT' AND P.MES ='9' AND D.MES='9'
group by p.area


Ahora bien se me presento otro problema, solo si es que la tabla detfactura tiene registros, me arroja los resultados que quiero. Es decir, si tengo en la tabla detfactura registros con valores del campo Area por ejemplo area1 y area2... solo me arroja los valores de la suma de monto y original de esas dos area solamente, las otras areas (3,4,5,6,7,8), no me las muestra.

Lo que deberia mostrar es un listado con todas las area con sus respectivas sumas, indistintamente si estas suman 0 ó tienen un valor.

Resumiendo: Solo me muestra las area en que las suma de (d.unitario * d.unidades) es distinto de 0.

Ojala se haya entendido.... gracias de ante mano

hecospina
02-10-2008, 00:03:14
Hola
me imagino que la tabla presupuesto contiene datos para todos los registros, o sea que tiene todas las areas para las condiciones que planteas
Si es asi, solo tienes que cambiar la palabra inner join por left join:)