Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/11/2011, 16:00
airknightz
Invitado
 
Mensajes: n/a
Puntos:
Problema para unir 3 tablas incluyendo la sentencia SUM

Saludos cordiales a todos, les comento mi problema: Quiero unir tres tablas
1. Producto (codigo, desc, ubicacion,...)
2. Nota Salida (id_salida, documento, codigo, cantidad, costo)
3. Nota Entrada (id_entrada, documento, codigo, cantidad, costo)

las tabla nota de salida y entrada actúan como detalles de la cabecera (tabla producto) y lo que busco es sumar el campo cantidad de todas las notas de salida por cada codigo de producto, y lo mismo para la nota de entrada pero quiero hacerlo en una sola consulta, debido a que estoy dando mantenimiento a un sistema ya desarrollado.

He desarrollado dos consultas pero con errores:

La primera con el JOIN
SELECT p.id, p.codigo, p.nombre, p.stock, p.medida, p.tipo, p.grupo, p.posicion, p.estado, p.sis, p.almacen, p.captura1, p.ubicacion1, p.conteo1, p.captura2, p.ubicacion2, p.conteo2, p.captura3, p.ubicacion3, p.conteo3, p.captura4, p.ubicacion4, p.conteo4, captura5, p.ubicacion5, p.conteo5, captura6, p.ubicacion6, p.conteo6, p.captura7, p.ubicacion7, p.conteo7, p.captura8, p.ubicacion8, p.conteo8, SUM( s.cantidad ) + SUM( s.cantidad2 ) + SUM( s.cantidad3 ) + SUM( s.cantidad4 ) + SUM( s.cantidad5 ) + SUM( s.cantidad6 ) + SUM( s.cantidad7 ) + SUM( s.cantidad8 ) AS SALIDA, SUM( ent.cantidad ) + SUM( ent.cantidad2 ) + SUM( ent.cantidad3 ) + SUM( ent.cantidad4 ) + SUM( ent.cantidad5 ) + SUM( ent.cantidad6 ) + SUM( ent.cantidad7 )
+ SUM( ent.cantidad8 ) AS ENTRADA FROM planilla AS p
LEFT JOIN salida AS s ON p.codigo=s.codigo WHERE p.sis =0
LEFT JOIN entrada AS ent ON p.codigo = ent.codigo WHERE p.sis =0
GROUP BY p.codigo ORDER BY p.codigo

y la segunda con el UNION

(SELECT p.id, p.codigo, p.nombre, p.stock, p.medida, p.tipo, p.grupo, p.posicion, p.estado, p.sis, p.almacen, p.captura1, p.ubicacion1, p.conteo1, p.captura2, p.ubicacion2, p.conteo2, p.captura3, p.ubicacion3, p.conteo3, p.captura4, p.ubicacion4, p.conteo4, captura5, p.ubicacion5, p.conteo5, captura6, p.ubicacion6, p.conteo6, p.captura7, p.ubicacion7, p.conteo7, p.captura8, p.ubicacion8, p.conteo8, SUM( s.cantidad ) + SUM( s.cantidad2 ) + SUM( s.cantidad3 ) + SUM( s.cantidad4 ) + SUM( s.cantidad5 ) + SUM( s.cantidad6 ) + SUM( s.cantidad7 ) + SUM( s.cantidad8 ) AS SALIDA FROM planilla AS p
LEFT JOIN salida AS s ON p.codigo=s.codigo
WHERE p.sis =0
GROUP BY p.codigo ORDER BY pla.codigo)
UNION
(SELECT pla.codigo,SUM( ent.cantidad ) + SUM( ent.cantidad2 ) + SUM( ent.cantidad3 ) + SUM( ent.cantidad4 ) + SUM( ent.cantidad5 ) + SUM( ent.cantidad6 ) + SUM( ent.cantidad7 ) + SUM( ent.cantidad8 ) AS ENTRADA, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null, null,null, null FROM planilla AS pla LEFT JOIN entrada AS ent ON pla.codigo = ent.codigo WHERE pla.sis =0
GROUP BY pla.codigo ORDER BY pla.codigo);

Los null van porque la documentacion de UNION dice que ambas consultas deben tener la misma cantidad de campos