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
Saludos!
probé las dos soluciones y ambas me resultaron de mucha utilidad. Anexo la solución:

