SQL - Restar stock!!

   
Vista:

Restar stock!!

Publicado por gustavo sanchis belda (5 intervenciones) el 14/09/2010 19:51:49
Hola!!!

Estoy creando una base de datos para llevar controlado el stock de un almacen, pero cuando hago una consulta para saber los totales, tengo el problema que
cuando inserto entradas, pero a estas entradas que he insertado no les inserto salidas para restarlas, estas entradas que son stock que hay en el almacen, no me salen en la consulta de los totales, solo me salen las entradas que tienen salidas, es decir las entradas a las que se le resta algo!!
Me falta algo en la consulta para conseguir que me salgan las entradas a las que no les resto nada?
Esta es mi consulta de totales.

SELECT entradas.Referencia, entradas.color, entradas.talla, SUM(entradas.suma_E - salidas.suma_S)
FROM (SELECT ENTRADAS.Referencia, ENTRADAS.Familia, ENTRADAS.Color, ENTRADAS.Talla, Sum(ENTRADAS.Cantidad_E) AS Suma_E
FROM ENTRADAS
GROUP BY ENTRADAS.Referencia, ENTRADAS.Familia, ENTRADAS.Color, ENTRADAS.Talla
ORDER BY ENTRADAS.Referencia)entradas
INNER JOIN (SELECT SALIDAS.Referencia, SALIDAS.Familia, SALIDAS.Color, SALIDAS.Talla, Sum(SALIDAS.Cantidad_S) AS Suma_S
FROM SALIDAS
GROUP BY SALIDAS.Referencia, SALIDAS.Familia, SALIDAS.Color, SALIDAS.Talla
ORDER BY SALIDAS.Referencia)salidas
ON (ENTRADAS.talla = salidas.talla) AND (ENTRADAS.color = salidas.color) AND (ENTRADAS.referencia = salidas.referencia)
GROUP BY entradas.referencia, entradas.color, entradas.talla;

Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Restar stock!!

Publicado por Leonardo Josué (878 intervenciones) el 14/09/2010 23:26:39
Buenas tardes Gustavo,

El problema que tienes en la consulta es por el INNER JOIN, ya que este se utiliza para hacer relaciones uno a uno, es decir, si no existe la referencia en las dos tablas que quieres unir entonces no se muestra en la consulta. En tu caso la relación es de 0 a muchos, por lo tanto debes utilizar un LEFT JOIN.

Adicionalmente en esta parte SUM(entradas.suma_E - salidas.suma_S)
tienes que agregar una condición para preguntar si no existen salidas la reste un 0, pues en caso contrario el resultado sería un vacío. Si tal como lo comentaste en el otro post estas utilizando MySQL la consulta quedaría más o menos así:

SELECT entradas.Referencia, entradas.color, entradas.talla, SUM(entradas.suma_E - IFNULL(salidas.suma_S, 0))
FROM (
SELECT ENTRADAS.Referencia, ENTRADAS.Familia, ENTRADAS.Color, ENTRADAS.Talla, Sum(ENTRADAS.Cantidad_E) AS Suma_E
FROM ENTRADAS
GROUP BY ENTRADAS.Referencia, ENTRADAS.Familia, ENTRADAS.Color, ENTRADAS.Talla
ORDER BY ENTRADAS.Referencia)entradas
LEFT JOIN (SELECT SALIDAS.Referencia, SALIDAS.Familia, SALIDAS.Color, SALIDAS.Talla, Sum(SALIDAS.Cantidad_S) AS Suma_S
FROM SALIDAS
GROUP BY SALIDAS.Referencia, SALIDAS.Familia, SALIDAS.Color, SALIDAS.Talla
ORDER BY SALIDAS.Referencia)salidas
ON (ENTRADAS.talla = salidas.talla) AND (ENTRADAS.color = salidas.color) AND (ENTRADAS.referencia = salidas.referencia)
GROUP BY entradas.referencia, entradas.color, entradas.talla;

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Restar stock!!

Publicado por gustavo sanchis belda (5 intervenciones) el 15/09/2010 08:42:01
Muchisimas gracias Leo!!

Eso era lo que me ocurria, por una parte la condición, y por otra el inner join por el left join.
Ahora ya parece que me funciona perfectamente.

Con esta respuesta doy por cerrado este tema.

Gracias de nuevo!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar