Espero me puedan ayudar, tengo un cursor el cual debe de hacer una resta en dos campos hasta llegar a 0 o números negativos.
adjunto ejemplo:
Código SQL:
El problema radica en que si la ultima fila tiene 200 unidades y la ultima compra fue por 50 no justifica las 150 restantes, únicamente inserta las 50 piezas de la ultima compra y las 150 restantes no las considera.Ver original
DECLARE Ccalcula CURSOR FOR SELECT Site, Parte, Existencias, Cantidad, CostoUSD, CostoMN, Fecha, Referencia FROM @mcCTAntiguedadInventarioAux ORDER BY Site,Parte,Fecha DESC OPEN Ccalcula FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha, @referencia WHILE @@fetch_status = 0 BEGIN ---------------------------------------------------------------------------------------------------------------- IF @parteAnterior <> @parte BEGIN IF @contador < @existenciaAnterior BEGIN SET @aux = (@existenciaAnterior - @contador) SET @auxUSD = ( SELECT TOP (1) CostoUSD FROM @mcCTAntiguedadInventarioAux WHERE Site = @nSite AND Parte = @parteAnterior ) SET @auxMN = ( SELECT TOP (1) CostoMN FROM @mcCTAntiguedadInventarioAux WHERE Site = @nSite AND Parte = @parteAnterior ) BEGIN TRY INSERT INTO @mcCTAntiguedadInventarioTmp (Site, Parte, Cantidad, costoUSD, CostoMN, Fecha, Referencia, TipoRespaldo, FechaRespaldo) VALUES (@nSite, @parteAnterior, @aux, @auxUSD, @auxMN, DATEADD(yy, -2, @fanalisis), 'INV INICIAL', @tipoanalisis, @fanalisis) END TRY BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH END --REINICIO LAS VARIABLES DE ANALISIS SET @parteAnterior = @parte SET @contador = 0 SET @existenciaAnterior = @existencia SET @aux = 0 SET @auxMN = 0 SET @auxUSD = 0 END IF (@existencia - @contador) = 0 BEGIN FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha, @referencia CONTINUE END IF @cantidad > (@existencia - @contador) BEGIN SET @cantidad = (@existencia - @contador) END SET @cantidad = ISNULL(@cantidad, 0) IF @cantidad = 0 BEGIN SET @cantidad = (@existencia - @contador) SET @costoUSD = ( SELECT TOP (1) CostoUSD FROM @mcCTAntiguedadInventarioAux WHERE Site = @nSite AND Parte = @parte ) SET @costoMN = ( SELECT TOP (1) CostoMN FROM @mcCTAntiguedadInventarioAux WHERE Site = @nSite AND Parte = @parte ) SET @fecha = DATEADD(yy, -2, @fanalisis) SET @referencia = 'INV INCIAL' END BEGIN TRY INSERT INTO @mcCTAntiguedadInventarioTmp (Site, Parte, Cantidad, costoUSD, CostoMN, Fecha, Referencia, TipoRespaldo, FechaRespaldo) VALUES (@nSite, @parte, @cantidad, @costoUSD, @costoMN, @fecha, @referencia, @tipoanalisis, @fanalisis) END TRY BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH SET @contador = @contador + @cantidad --------------------------------------------------------------------------------------------------------------- FETCH NEXT FROM Ccalcula INTO @nSite, @parte, @existencia, @cantidad, @costoUSD, @costoMN, @fecha, @referencia END CLOSE Ccalcula DEALLOCATE Ccalcula INSERT INTO [dbo].[mcCTAntiguedadInventarioV3] SELECT * FROM @mcCTAntiguedadInventarioTmp END
Espero haber expuesto mi problema con claridad.
Saludos.