
Restar valores entre dos tablas y mostrar existencias
Publicado por Mauro (1 intervención) el 25/05/2022 02:32:44
Hola Amigos. Estoy con dificultad en una consulta en MSSQL que a priori parece sencilla pero no doy en la tecla, estoy un poco oxidado en SQL.
Tengo dos tablas, Stock y Salidas, ambas comparten IdProducto. En la tabla Stock hay una existencia de cada producto que a medida que el producto sale, se va generando un registro en la tabla Salidas con el IdProducto y la cantidad que sale, junto con un IdSalida que identifica la salida:
Tabla Stock:
+---------------+------------+-----------------+
| IdPoducto | Nombre | CantOriginal |
+---------------+- ----------+-----------------+
| 1 | Prod1 | 9 |
| 2 | Prod2 | 20 |
| 3 | Prod3 | 10 |
| 4 | Prod4 | 18 |
| 5 | Prod5 | 20 |
| 6 | Prod6 | 19 |
| 7 | Prod7 | 25 |
| 8 | Prod8 | 15 |
| 9 | Prod9 | 15 |
+---------------+------------+-----------------+
Tabla Salidas:
+---------------+------------+-----------------------+
| IdProducto | IdSalida | CantDescontada |
+---------------+- ----------+-----------------------+
| 1 | 1 | 9 |
| 2 | 1 | 20 |
| 4 | 1 | 5 |
| 4 | 2 | 4 |
| 5 | 1 | 19 |
| 9 | 1 | 10 |
+---------------+------------+-----------------------+
Lo que necesito es generar una consulta donde se muestren los IdProducto que aun tengan alguna cantidad, sería una tabla Existencias, por ejemplo, algo así:
+---------------+------------+-----------------+
| IdPoducto | Nombre | CantStock |
+---------------+- ----------+-----------------+
| 3 | Prod3 | 10 |
| 4 | Prod4 | 9 |
| 5 | Prod5 | 1 |
| 6 | Prod6 | 19 |
| 7 | Prod7 | 25 |
| 8 | Prod8 | 15 |
| 9 | Prod9 | 5 |
+---------------+------------+-----------------+
Probé con:
SELECT * FROM Stock WHERE IdProducto NOT IN (
SELECT IdProducto FROM Salidas)
pero el resultado no muestra las que al menos tiene una existencia:
+---------------+------------+-----------------+
| IdPoducto | Nombre | CantStock |
+---------------+- ----------+-----------------+
| 3 | Prod3 | 10 |
| 6 | Prod6 | 19 |
| 7 | Prod7 | 25 |
| 8 | Prod8 | 15 |
+---------------+------------+-----------------+
Muchas gracias por la ayuda.
Tengo dos tablas, Stock y Salidas, ambas comparten IdProducto. En la tabla Stock hay una existencia de cada producto que a medida que el producto sale, se va generando un registro en la tabla Salidas con el IdProducto y la cantidad que sale, junto con un IdSalida que identifica la salida:
Tabla Stock:
+---------------+------------+-----------------+
| IdPoducto | Nombre | CantOriginal |
+---------------+- ----------+-----------------+
| 1 | Prod1 | 9 |
| 2 | Prod2 | 20 |
| 3 | Prod3 | 10 |
| 4 | Prod4 | 18 |
| 5 | Prod5 | 20 |
| 6 | Prod6 | 19 |
| 7 | Prod7 | 25 |
| 8 | Prod8 | 15 |
| 9 | Prod9 | 15 |
+---------------+------------+-----------------+
Tabla Salidas:
+---------------+------------+-----------------------+
| IdProducto | IdSalida | CantDescontada |
+---------------+- ----------+-----------------------+
| 1 | 1 | 9 |
| 2 | 1 | 20 |
| 4 | 1 | 5 |
| 4 | 2 | 4 |
| 5 | 1 | 19 |
| 9 | 1 | 10 |
+---------------+------------+-----------------------+
Lo que necesito es generar una consulta donde se muestren los IdProducto que aun tengan alguna cantidad, sería una tabla Existencias, por ejemplo, algo así:
+---------------+------------+-----------------+
| IdPoducto | Nombre | CantStock |
+---------------+- ----------+-----------------+
| 3 | Prod3 | 10 |
| 4 | Prod4 | 9 |
| 5 | Prod5 | 1 |
| 6 | Prod6 | 19 |
| 7 | Prod7 | 25 |
| 8 | Prod8 | 15 |
| 9 | Prod9 | 5 |
+---------------+------------+-----------------+
Probé con:
SELECT * FROM Stock WHERE IdProducto NOT IN (
SELECT IdProducto FROM Salidas)
pero el resultado no muestra las que al menos tiene una existencia:
+---------------+------------+-----------------+
| IdPoducto | Nombre | CantStock |
+---------------+- ----------+-----------------+
| 3 | Prod3 | 10 |
| 6 | Prod6 | 19 |
| 7 | Prod7 | 25 |
| 8 | Prod8 | 15 |
+---------------+------------+-----------------+
Muchas gracias por la ayuda.
Valora esta pregunta


0