Ver Mensaje Individual
  #3 (permalink)  
Antiguo 08/08/2011, 15:43
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Suma de Movimientos

Prueba algo asi :)

Código SQL:
Ver original
  1. CREATE TABLE #articulos
  2. (
  3. id INT,
  4. articulo VARCHAR(20),
  5. stock INT)
  6.  
  7. CREATE TABLE #movimientos
  8. (
  9. id INT,
  10. articulo VARCHAR(20),
  11. tipo_mov CHAR(1),
  12. cantidad INT
  13. )
  14.  
  15. CREATE TABLE #habilitados
  16. (
  17. id INT,
  18. articulo VARCHAR(20),
  19. perfil bit
  20. )
  21.  
  22. INSERT INTO #articulos VALUES (1,'zapallo',10)
  23. INSERT INTO #articulos VALUES (2,'peras',20)
  24. INSERT INTO #articulos VALUES (3,'tomate',12)
  25.  
  26. INSERT INTO #movimientos VALUES (1,'zapallo','E',20)
  27. INSERT INTO #movimientos VALUES (2,'zapallo','E',30)
  28. INSERT INTO #movimientos VALUES (3,'peras','S',5)
  29. INSERT INTO #movimientos VALUES (4,'peras','E',10)
  30.  
  31. INSERT INTO #habilitados VALUES (1,'zapallo',1)
  32. INSERT INTO #habilitados VALUES (2,'peras',1)
  33. INSERT INTO #habilitados VALUES (3,'tomate',0)
  34.  
  35.  
  36. UPDATE #articulos
  37. SET stock=stock+t2.total
  38. FROM
  39. (
  40.  
  41. SELECT SUM(total) total, articulo
  42. FROM
  43. (
  44. SELECT
  45. CASE
  46. WHEN M.tipo_mov='E' THEN SUM(cantidad) ELSE SUM(-cantidad) END AS total, M.articulo
  47. FROM #movimientos M
  48. INNER JOIN #habilitados H ON (M.articulo=h.articulo AND h.perfil=1)
  49. GROUP BY M.articulo,M.tipo_mov
  50. )t1
  51. GROUP BY articulo
  52.  
  53. ) t2 WHERE #articulos.articulo=t2.articulo
  54.  
  55. SELECT * FROM #articulos
  56.  
  57. id  articulo    stock
  58. 1   zapallo 60
  59. 2   peras   25
  60. 3   tomate  12

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me