pude encontrar una alternativa, pero no es creando una nueva tabla, sino actualizando la tabla 1
Código SQL:
Ver originalCREATE TABLE pasos(
id INT,
paso_1 VARCHAR(25),
paso_2 VARCHAR(25),
paso_3 VARCHAR(25),
paso_4 VARCHAR(25)
);
INSERT INTO pasos VALUES ('1','1','2','1','4');
INSERT INTO pasos VALUES ('2','3','2','4','4');
INSERT INTO pasos VALUES ('3','3','2','3','1');
CREATE TABLE estados(
id INT,
estado VARCHAR(25)
);
INSERT INTO estados VALUES ('1','iniciado');
INSERT INTO estados VALUES ('2','en proceso');
INSERT INTO estados VALUES ('3','aprobado');
INSERT INTO estados VALUES ('4','terminado');
CREATE proc prueba
@a VARCHAR(2)
AS
DECLARE @c VARCHAR(2)
SET @c=1
DECLARE @SQL VARCHAR(1000)
while @c < @a
BEGIN
SET @SQL='update pasos set paso_'+@c+'=t02.estado from pasos t01 inner join estados t02 on t01.paso_'+@c+'=t02.id'
EXEC(@SQL)
SET @c=@c+1
END
GO
EXEC prueba 6
en donde @a es la cantidad de columnas que tiene tu tabla,
espero te sirva de algo.....