Tengo una tabla con columnas que indican clases para cada registro. tengo que obtener para cada registro, cuantas veces se repite cada clase.
armé este cursor que me resuelve el problema, pero tarda muchícimo. Alguna alternativa o forma de optimizarlo?
Código:
declare @id as int declare @columna1 as varchar(50) declare @columna2 as varchar(50) declare @columna3 as varchar(50) declare @columna4 as varchar(50) declare @columna5 as varchar(50) declare @columna6 as varchar(50) declare @columna7 as varchar(50) declare @columna8 as varchar(50) declare @columna9 as varchar(50) declare @columna10 as varchar(50) delete from procesado declare cur cursor for select id, class0, class1, class2, class3, class4, class5, class6, class7, class8, class9 from total open cur -- Avanzamos un registro y cargamos en las variables los valores encontrados en el primer registro fetch next from cur into @id, @columna1, @columna2, @columna3, @columna4, @columna5, @columna6,@columna7, @columna8, @columna9, @columna10 while @@fetch_status = 0 begin BEGIN TRY INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna1,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna1 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna2,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna2 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna3,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna3 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna4,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna4 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna5,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna5 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna6,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna6 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna7,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna7 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna8,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna8 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna9,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna9 END CATCH begin try INSERT INTO procesado (id,clase,cantidad) VALUES (@id,@columna10,1) END TRY BEGIN CATCH UPDATE procesado SET cantidad = cantidad + 1 WHERE ID = @ID and clase= @columna10 END CATCH -- Avanzamos otro registro fetch next from cur into @id, @columna1, @columna2, @columna3, @columna4, @columna5, @columna6,@columna7, @columna8, @columna9, @columna10 end -- cerramos el cursor close cur deallocate cur
Muchas gracias desde ya