Ver Mensaje Individual
  #20 (permalink)  
Antiguo 16/12/2011, 03:34
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Consulta de resumen de dos tablas

Lamentablemente la consulta es un poco compleja, porque para evitar la multiplicación de datos ambas cuentas (Compras y Ventas) deben estar consolidadas ya por separado, lo que significa que hay que hacer primero las subconsultas en el FROM y entonces hacer el INNER JOIN correspondiente.
La respuesta es en definitiva:
Código MySQL:
Ver original
  1.   T1.IdArt, T1.Modelo, Compras, IFNULL(Ventas, 0) Ventas, (Compras - IFNULL(Ventas, 0) ) Saldo
  2.   (SELECT
  3.     A.IdArt,
  4.     A.Modelo,
  5.     SUM(AC.Cantidad) Compras
  6.   FROM
  7.     Articulos A
  8.     INNER JOIN ArtCompras AC ON AC.IdArt = A.IdArt
  9.   GROUP BY Ac.IdArt) T1
  10.   (SELECT
  11.     A.IdArt,
  12.     SUM(AV.Cantidad) Ventas
  13.   FROM
  14.     Articulos A
  15.     INNER JOIN ArtVenta AV ON A.IdArt = AV.IdArt
  16.   GROUP BY A.IdArt) T2 ON T1.IdArt = T2.IdArt;

Respecto a las tablas, hay algunos cuantos defectos formales, pero los más importantes son:
- Usas campos DATETIME para Fecha y para Hora, cuando deberías usar DATE y TIME para cada uno. De ese modo evitas basura en los datos que puede, luego, generar errores no detectables.
- Estas usando FK sin declararlas, a pesar de que las tablas si son InnoDB.
- Hay campos que no usas. Si no los usas o no deben existir, o debes implementarlos en la programación.
- Hay identificadores adicionales en las tablas de compra y venta que no se entiened para qué se usan.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)