intrucion SQL imposible

manuel753
29 de Junio del 2009
bueno la cuestion es que estoy intentando de hacer una intruccion SQL para que me saque el stock de producto, en la cual intervienen 4 tablas, una es articulos, otra son movimientos, otra movimientos_compras, y otra son tickets, el nexo comun es cod_articulo. Necesito sumar las cantidades que hay en movimientos_compras.cantidad, lo que hay en movimientos.cantidad y en tickets.cantidad pero no funcion de ninguna de las formas que he probado lo ultimo es SELECT ARTICULOS.cod_articulo, Sum(MOV.CANTIDAD) AS SumaDeCANTIDAD, Sum(MOV_COMPRA.CANTIDAD) AS SumaDeCANTIDAD1, Sum(TICKETS.CANTIDAD) AS SumaDeCANTIDAD2, MOV.COD_ARTICULO, MOV_COMPRA.COD_ARTICULO, TICKETS.COD_ARTICULO
FROM TICKETS INNER JOIN (MOV_COMPRA INNER JOIN (MOV LEFT JOIN ARTICULOS ON MOV.COD_ARTICULO = ARTICULOS.cod_articulo) ON MOV_COMPRA.COD_ARTICULO = MOV.COD_ARTICULO) ON TICKETS.COD_ARTICULO = MOV_COMPRA.COD_ARTICULO
GROUP BY ARTICULOS.cod_articulo, MOV.COD_ARTICULO, MOV_COMPRA.COD_ARTICULO, TICKETS.COD_ARTICULO

pero la suma (de las cantidades de cada tabla) nunca es correcta
help:

gargamel
29 de Junio del 2009
Hay varias soluciones, para mí la más sencilla sería:

SELECT cod_articulo, sum(cantidad) AS stock
FROM [SELECT * from t1 union select * from t2 UNION select * from t3 ]. AS todasjuntas
GROUP BY cod_articulo;

El usar JOINS te complicará el tema ya que las tablas que tratas de enlazar realmente no lo están.

Saludos

gargamel
29 de Junio del 2009
perdona, en el mensaje anterior olvidé aclarar que t1, t2 y t3 son las tablas que contienen las cantidades, aunque eso ya lo sabrías, jeje.

aquí es donde podrías usar el left join, una vez que ya tienes todo "agrupado":

SELECT [todasjuntas.cod_articulo], [descripcion], sum(cantidad) AS stock
FROM [SELECT * from t1 union select * from t2 UNION select * from t3 ]. AS todasjuntas LEFT JOIN articulos ON [articulos].[cod_articulo]=todasjuntas.cod_articulo
GROUP BY [todasjuntas.cod_articulo], [descripcion];

Pero mejor analizar el tema con el ejemplo anterior, está más claro.

P.D.: Fíjate que tras el último corchete hay un punto.