Respuesta: Calculo de Columnas
Código SQL:
Ver originalCREATE TABLE #mitabla( Producto VARCHAR(04), Disponible NUMERIC(16,8), Proceso NUMERIC(16,8), Lote NUMERIC(16,8), Periodo INT, Requerido NUMERIC(16,8), DisponibleNuevo NUMERIC(16,8), Saldo NUMERIC(16,8), Demanda NUMERIC(16,8) ) GO CREATE TABLE #mitabla2( Producto VARCHAR(04), Disponible NUMERIC(16,8), Proceso NUMERIC(16,8), Lote NUMERIC(16,8), Periodo INT, Requerido NUMERIC(16,8), DisponibleNuevo NUMERIC(16,8), Saldo NUMERIC(16,8), Demanda NUMERIC(16,8) ) GO INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201406,150,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201407,100,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201408,120,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201409,80,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201410,25,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201411,150,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1001',200,20,1000,201412,300,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1002',100,80,500,201501,50,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1002',100,80,500,201501,30,0,0,0) INSERT INTO #mitabla(Producto, Disponible, Proceso, Lote, Periodo, Requerido, DisponibleNuevo, Saldo, Demanda) VALUES('1002',100,80,500,201502,65,0,0,0) SELECT *,ROW_NUMBER() OVER(partition BY producto ORDER BY producto) AS rn,IDENTITY(INT,1,1) AS [ROW] INTO #temp FROM #mitabla DECLARE @x INT DECLARE @disponible_nuevo INT DECLARE @saldo INT DECLARE @demanda INT DECLARE @rn INT SET @x=1 SET @rn=1 while @x<=(SELECT COUNT(*) FROM #temp) BEGIN SELECT @rn=rn FROM #temp WHERE [ROW]=@x IF @rn=1 SELECT @disponible_nuevo=disponible FROM #temp WHERE [ROW]=@x ELSE BEGIN IF @saldo<0 SET @saldo=@saldo*-1 ELSE SET @saldo=0 SET @disponible_nuevo=@saldo END SELECT @saldo=requerido-@disponible_nuevo-proceso FROM #temp WHERE [ROW]=@x IF @saldo<0 SET @demanda=0 ELSE SET @demanda=@saldo INSERT INTO #mitabla2 SELECT producto,disponible,proceso,lote,periodo,requerido,@disponible_nuevo,@saldo,@demanda FROM #temp WHERE [ROW]=@x SET @x=@x+1 END SELECT * FROM #mitabla2 DELETE FROM #mitabla2 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 |