Esto lo resolví mediante el siguiente cursor, si lo hace bien pero se tarda mucho para cuando son millones de registros, alguna idea de como se puede mejorar o convertir en un SP para que sea más rápido??? muchas gracias!
Código:
IF OBJECT_ID('Carga_Boleta_Match') IS NOT NULL Drop Table Carga_Boleta_Match go create table Carga_Boleta_Match ( Boleta bigint, CveArticulo bigint, desArticulo varchar(30), Peso real, Peso2 real, CantidadPrendas bigint, Comentario varchar(50)) go SET NOCOUNT ON DECLARE @intFlag INT DECLARE @temp INT DECLARE @CantidadPrendas INT DECLARE @boleta VARCHAR(10) DECLARE @cveArticulo VARCHAR(10) DECLARE @desArticulo VARCHAR(10) DECLARE @peso VARCHAR(10) DECLARE @peso2 REAL DECLARE @comentario VARCHAR(10) DECLARE @Sucursal INT DECLARE articulos_cursor CURSOR FOR select b.CantidadPrendas,a.boleta,c.CveArticulo, c.DescArticulo, c.Peso,0 as peso2,'' as comentario FROM MOMBEF_Trabajo a, MOMBDF_1 b, MOARCF_1 c where a.Boleta=b.boleta and cast(a.sucursal as bigint)=b.sucursal and b.cveArticulo=c.CveArticulo OPEN articulos_cursor; FETCH NEXT FROM articulos_cursor INTO @temp,@boleta,@cveArticulo,@desArticulo,@peso,@Peso2,@comentario; WHILE @@FETCH_STATUS = 0 BEGIN SET @intFlag = 0; WHILE (@intFlag <@temp) BEGIN PRINT @temp INSERT INTO Carga_Boleta_Match values (@boleta, @cveArticulo, @DesArticulo, @Peso,@Peso2,@temp, @comentario) SET @intFlag=@intFlag+1; IF @intFlag =@temp BREAK ELSE CONTINUE END UPDATE Carga_Boleta_Match SET Comentario ='Validar', Peso2=Peso/CantidadPrendas WHERE CantidadPrendas >1 FETCH NEXT FROM articulos_cursor INTO @temp,@boleta,@cveArticulo,@desArticulo,@peso,@peso2,@comentario; END CLOSE articulos_cursor; DEALLOCATE articulos_cursor; GO