Buenos días FixIt te pongo el ejemplo de cómo sería la sintaxis para SQL Server
Supongamos que en tu tabla de entradas tienes algo como esto:
Código:
idEntrada,Nombre,Cantidad
--------------------------------------
1,Trapeador,5
2,Escoba,10
3,Cubeta,20
4,Trapeador,2
5,Escoba,5
6,Trapeador,10
Esto quiere decir que en total tienes 17 Trapeadores, 15 escobas y 20 cubetas
Supongamos que tienes las siguientes salidas
Código:
idSalida,Nombre,Cantidad
--------------------------------------
1,Trapeador,5
2,Escoba,7
3,Trapeador,4
4,Escoba,1
Esto quiere decir que el total de salidas de trapeadores es 9 y de escobas 8 (No hay salida de cubetas).
La consulta quedaría más o menos así
Código SQL:
Ver originalSELECT E.nombre, SUM(E.cantidad - ISNULL(S.cantidad, 0)) AS stock
FROM
(
SELECT nombre, SUM(cantidad) AS cantidad
FROM Entradas
GROUP BY Nombre
) E
LEFT JOIN (
SELECT nombre, SUM(cantidad) AS cantidad
FROM Salidas
GROUP BY Nombre
) S
ON (E.nombre = S.nombre)
GROUP BY E.nombre
ORDER BY E.nombre
El resultado de esta consulta sería
Código:
Nombre,Stock
------------------------
Cubeta,20
Escoba,7
Trapeador,8
Si observas lo que se tiene que hacer en primer lugar es un LEFT JOIN entre las consultas que pusiste en tu post (el DISTINCT no es necesario). Utilizas LEFT porque hay artículos como la cubeta que no tienen ninguna salida. Finalmente haces una sumatoria de las diferencias entre entradas y salidas. La función ISNULL es para restar un 0 en caso de no existir ninguna salida ya que por default se asigna un NULL y si a un numero le restas NULL el resultado es NULL.
Si utilizas alguna DBMS diferente sería cuestión cambies la función ISNULL por su equivalente (IFNULL para MySQL, NVL para ORACLE, etc)
Saludos y si espero tus comentarios.