Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/10/2010, 10:42
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Query para stock

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 original
  1. SELECT E.nombre, SUM(E.cantidad - ISNULL(S.cantidad, 0)) AS stock
  2. FROM
  3. (
  4. SELECT nombre, SUM(cantidad) AS cantidad
  5. FROM Entradas
  6. GROUP BY Nombre
  7. ) E
  8. LEFT JOIN (
  9. SELECT nombre, SUM(cantidad) AS cantidad
  10. FROM Salidas
  11. GROUP BY Nombre
  12. ) S
  13. ON (E.nombre = S.nombre)
  14. GROUP BY E.nombre
  15. 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.