Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/08/2011, 15:25
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Suma de Movimientos

Hola maloboy_2k:

creo que el problema está en el GROUP BY ya que al agrupar también por tipo_movimiento estaría poniendo un registro para las entradas y otro para las salidas:

Checa este script:

Código SQL:
Ver original
  1. DECLARE @Articulos TABLE (id INT, Articulo VARCHAR(10), Stock INT)
  2. INSERT INTO @Articulos VALUES (1, 'zapallo', 10)
  3. INSERT INTO @Articulos VALUES (2, 'peras', 20)
  4. INSERT INTO @Articulos VALUES (3, 'Tomate', 12)
  5.  
  6. DECLARE @Movimientos TABLE (id INT, Articulo VARCHAR(10), Tipo_Mov VARCHAR, Cantidad INT)
  7. INSERT INTO @Movimientos VALUES (1, 'zapallo', 'E', 20)
  8. INSERT INTO @Movimientos VALUES (2, 'zapallo', 'E', 30)
  9. INSERT INTO @Movimientos VALUES (3, 'peras', 'S', 5)
  10. INSERT INTO @Movimientos VALUES (4, 'peras', 'E', 10)
  11.  
  12. DECLARE @Habilitados TABLE (id INT, articulo VARCHAR(10), perfil INT)
  13. INSERT INTO @Habilitados VALUES (1, 'zapallo', 1)
  14. INSERT INTO @Habilitados VALUES (2, 'peras', 1)
  15. INSERT INTO @Habilitados VALUES (3, 'tomate', 0)
  16.  
  17. SELECT * FROM @Articulos
  18.  
  19. /*
  20. id          Articulo   Stock
  21. ----------- ---------- -----------
  22. 1           zapallo    10
  23. 2           peras      20
  24. 3           Tomate     12
  25. */
  26.  
  27. UPDATE @Articulos SET stock = calculo.cantidad
  28. FROM @Articulos a INNER JOIN
  29. (
  30. SELECT m.articulo, SUM(CASE WHEN tipo_mov = 'E' THEN cantidad ELSE -cantidad END) cantidad
  31. FROM @Movimientos m INNER JOIN
  32. @Habilitados h ON h.articulo = m.articulo
  33. WHERE h.perfil = 1
  34. GROUP BY m.articulo
  35. ) calculo ON calculo.articulo = a.articulo
  36.  
  37. SELECT * FROM @Articulos
  38.  
  39. /*
  40. id          Articulo   Stock
  41. ----------- ---------- -----------
  42. 1           zapallo    50
  43. 2           peras      5
  44. 3           Tomate     12
  45. */

Por último, pasar 10 días para resolver una consulta de este tipo es una barbaridad, si te trabas con una consulta más de 1 día es recomendable que pidas ayuda.

Saludos
Leo.

Saludos y espero que te sirva el código.