Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/08/2014, 16:32
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Calculo de Columnas

Código SQL:
Ver original
  1. CREATE TABLE #mitabla(
  2. Producto VARCHAR(04),
  3. Disponible NUMERIC(16,8),
  4. Proceso NUMERIC(16,8),
  5. Lote NUMERIC(16,8),
  6. Periodo INT,
  7. Requerido NUMERIC(16,8),
  8. DisponibleNuevo NUMERIC(16,8),
  9. Saldo NUMERIC(16,8),
  10. Demanda NUMERIC(16,8)
  11. )
  12. GO
  13. CREATE TABLE #mitabla2(
  14. Producto VARCHAR(04),
  15. Disponible NUMERIC(16,8),
  16. Proceso NUMERIC(16,8),
  17. Lote NUMERIC(16,8),
  18. Periodo INT,
  19. Requerido NUMERIC(16,8),
  20. DisponibleNuevo NUMERIC(16,8),
  21. Saldo NUMERIC(16,8),
  22. Demanda NUMERIC(16,8)
  23. )
  24. GO
  25.  
  26. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201406,150,0,0,0)
  27. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201407,100,0,0,0)
  28. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201408,120,0,0,0)
  29. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201409,80,0,0,0)
  30. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201410,25,0,0,0)
  31. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201411,150,0,0,0)
  32. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201412,300,0,0,0)
  33. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1002',100,80,500,201501,50,0,0,0)
  34. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1002',100,80,500,201501,30,0,0,0)
  35. INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1002',100,80,500,201502,65,0,0,0)
  36.  
  37.  
  38. SELECT *,ROW_NUMBER() OVER(partition BY producto ORDER BY producto) AS rn,IDENTITY(INT,1,1) AS [ROW] INTO #temp FROM #mitabla
  39.  
  40. DECLARE @x INT
  41. DECLARE @disponible_nuevo INT
  42. DECLARE @saldo INT
  43. DECLARE @demanda INT
  44. DECLARE @rn INT
  45. SET @x=1
  46. SET @rn=1
  47. while @x<=(SELECT COUNT(*) FROM #temp)
  48. BEGIN
  49. SELECT @rn=rn FROM #temp WHERE [ROW]=@x
  50. IF @rn=1
  51.     SELECT @disponible_nuevo=disponible FROM #temp WHERE [ROW]=@x
  52. ELSE
  53. BEGIN
  54.     IF @saldo<0
  55.       SET @saldo=@saldo*-1
  56.     ELSE
  57.       SET @saldo=0
  58.     SET @disponible_nuevo=@saldo
  59. END
  60.  
  61.  
  62.  
  63.  
  64. SELECT @saldo=requerido-@disponible_nuevo-proceso FROM #temp WHERE [ROW]=@x
  65. IF @saldo<0
  66.   SET @demanda=0
  67. ELSE
  68.   SET @demanda=@saldo  
  69.  
  70. INSERT INTO #mitabla2
  71. SELECT producto,disponible,proceso,lote,periodo,requerido,@disponible_nuevo,@saldo,@demanda FROM #temp WHERE [ROW]=@x
  72.  
  73. SET @x=@x+1
  74. END
  75.  
  76. SELECT * FROM #mitabla2
  77. DELETE FROM #mitabla2
  78.  
  79. DROP TABLE #temp

Hay un error en tus calculos en el segundo renglon deberia ser en la columna saldo y demanda 10 y tu tienes 30, te falto restar proceso ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me