MySQL - juntar dos consultas para entradas y salidas de inventario

 
Vista:
sin imagen de perfil

juntar dos consultas para entradas y salidas de inventario

Publicado por DANIEL (2 intervenciones) el 18/09/2016 08:27:36
hola necesito ayuda por favor tengo una consulta que no se como realizarla,
tengo las siguientes tablas CON LOS SIGUIENTES CAMPOS

SALIDA(id,fecha,usuario_id, almacen_id)
DETALLE_SALIDA(id,salida_id,articulo_id, cantidad)

INGRESO(id,fecha,usuario_id,almacen_id)
DETALLE_INGRESO(id,ingreso_id,articulo_id,cantidad)

***esta consulta me da la suma de todos los ingresos agrupados por articulo:
SELECT a.descripcion, SUM( di.cantidad ) AS total FROM articulo a LEFT JOIN
detalle_ingreso di ON a.id = di.articulo_id GROUP BY a.id

**esta otra de igual manera suma las salidas agrupadas por articulo

SELECT a.descripcion, SUM( ds.cantidad ) AS total FROM articulo a LEFT JOIN
detalle_salida ds ON a.id = ds.articulo_id GROUP BY a.id

Quiero juntar esas dos consultas para que me resulte algo asi:

articulo |total ingresos | total salidas| disponible
--------------------------------------------------------------------------
articulo1 | 20 | 6 | 14
articulo2 | 10 | 3 | 7
articulo 3 ................ ......... .........
...
.
...

intente con esto pero me sale error en la subconsulta , se que esta mal pero ya intente de varias maneras .

SELECT a.descripcion, sum(di.cantidad) as totalingreso,(select sum(ds.cantidad)as totalsalida from articulo a left join detalle_salida ds on a.id=ds.articulo_id group by) from articulo a left join detalle_ingreso di on a.id=di.articulo_id GROUP BY a.id

necesito ayuda por favor .... :D
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
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

juntar dos consultas para entradas y salidas de inventario

Publicado por Rafael (97 intervenciones) el 19/09/2016 13:22:41
Prueba con esto:

1
2
3
4
5
6
7
8
SELECT ARTICULO
     , TOTAL_INGRESO
	 , TOTAL_SALIDA
	 , (TOTAL_INGRESO - TOTAL_SALIDA) AS TOTAL_DISPONIBLE
FROM   (SELECT a.descripcion AS ARTICULO
			 , (SELECT sum(di.cantidad) FROM detalle_ingreso di WHERE a.id=di.articulo_id) AS TOTAL_INGRESO
			 , (SELECT sum(ds.cantidad) FROM detalle_salida ds WHERE a.id=ds.articulo_id) AS TOTAL_SALIDA
		FROM   articulo a) QA

Saludos
Pd. Si te sirve la info a mi me sirve un +1
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

juntar dos consultas para entradas y salidas de inventario

Publicado por DANIEL (2 intervenciones) el 20/09/2016 02:37:55
muchas gracias Rafael , si me sirve y me funciona bien, lo que no entiendo es para que sirve QA no se si pudieras explicar esa parte por favor. Saludos
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
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

juntar dos consultas para entradas y salidas de inventario

Publicado por Rafael (97 intervenciones) el 20/09/2016 11:05:47
Dependiendo de la configuración del cliente de MySQL puede o no requerirte un ALIAS a la subconsulta, por costumbre ya tengo el usar siempre uno de tal modo que si necesitas hacer un filtrado extra lo puedes referenciar al QA (Alias de la subconsulta).

Para mi es un nemotécnico Query A, y le pongo QA pero podrías poner cualquier otro alias, y en algunos casos obviarlo, como te digo ya es costumbre.

Imagina que solo quisieras los productos que empiezan con "A" luego seria mas sencillo poner:
1
WHERE QA.ARTICULO LIKE 'A%'

O si tuvieses que hacer un join... en fin que por mas de un detalle es mas fácil usar el alias que TODA la expresión...

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

juntar dos consultas para entradas y salidas de inventario

Publicado por Victor (1 intervención) el 02/12/2020 09:35:24
Gracias Rafael me sirvió mucho.
solo un pequeño detalle.
En caso de que un producto no haya tenido salidas en total_salida me marca null y en disponible lo mismo. como le haría para que me marque 0 en total_salida y el disponible sea igual al total_ingresos???? podrías ayudarme por favor.....
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

juntar dos consultas para entradas y salidas de inventario

Publicado por emadem (1 intervención) el 24/08/2021 18:43:33
Me sirvió mucho este ejemplo!

Para lo que menciona Victor, yo cambié lo siguiente:
1
sum(ds.cantidad)
1
COALESCE(sum(ds.cantidad),0)

igual para
1
sum(di.cantidad)
1
COALESCE(sum(di.cantidad),0)

de esta forma si es NULL lo reemplaza por cero y la suma funciona correctamente

Saludos
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

juntar dos consultas para entradas y salidas de inventario

Publicado por libardo (1 intervención) el 04/05/2022 23:36:18
gracias por su ayuda, me fue de de mucha utilidad
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