Ver Mensaje Individual
  #18 (permalink)  
Antiguo 06/09/2013, 05:03
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: inner join con union

freedert,
tienes que responder de algún modo al punto más importante, algo que te puso @gnzsoloyo en su última respuesta:
Cita:
Para realizar un reporte de movimiento de ingresos y egresos por productos, necesitas sí o si usar la tabla de productos, y no solamente la de movimientos, porque el que haya egresos de productos no implica necesariamente que haya ingresos del mismo producto, para el mismo período
¿No tienes una tabla productos?

La lógica general sería:
SELECT prod_cod FROM productos LEFT JOIN mov_articulos ON porprodcod LEFT JOIN mov_prov_articulos ON porprodcod

pero lo tendremos que hacer por subconsultas probablemente para controlar todo lo de las factura y demás, que eso lo resolveremos más adelante. El problema es que no existe esa tabla productos y parece que quieres hacerlo con la tabla mov_prov_articulos, que son los artículos que adquieres y guardas en almacén. Probablemente una consulta con DISTINCT de los códigos de esos artículos en mov_prov_articulos te sacará el listado de artículos del pasado y del presente, pero yo creo que lo mejor hubiera sido tener una tabla de artículos de referencia. Tal vez no te estoy entendiendo bien del todo, pero dinos si vamos muy descaminados. No puedes vender, facturar, lo que no has ingresado, eso es cierto, pero hubiera sido más fácil hacer todo desde una tabla de productos, creo. A falta de eso, esta idea para empezar a preparar:
SELECT DISTINCT prod_cod FROM mov_prov_articulos mva LEFT JOIN mov_articulos ma ON porprodcod LEFT JOIN mov_prov_articulos mva2 ON porprodcod. La idea sería esta (no he probado nada), por si te sirve de orientación:
Código MySQL:
Ver original
  1. SELECT DISTINCT mpa.prod_cod, mpa.prod_nom, T1.egresos, T2.ingresos FROM mov_prov_articulos mpa LEFT JOIN
  2.  
  3.     (SELECT mov_articulos.prod_cod, mov_articulos.prod_nom,  SUM(mov_articulos.prod_cant) AS egresos
  4.             FROM mov_articulos
  5.             INNER JOIN mov_factura
  6.             ON mov_factura.nro_factura = mov_articulos.id_comp
  7.             WHERE tipo_comp = 1
  8.             GROUP BY mov_articulos.prod_cod)T1 ON mpa.prod_cod = T1.prod_cod
  9.                    
  10.                    
  11.            LEFT JOIN (SELECT mov_prov_articulos.prod_cod, mov_prov_articulos.prod_nom, SUM(mov_prov_articulos.prod_cant) AS ingresos
  12.             FROM mov_prov_articulos
  13.             INNER JOIN mov_prov_factura
  14.             ON mov_prov_factura.nro_factura = mov_prov_articulos.id_comp
  15.             WHERE tipo_comp = 1
  16.             GROUP BY mov_prov_articulos.prod_cod)T2 ON mpa.prod_cod = T2.prod_cod GROUP BY mpa.prod_cod