Tirei isso do livro The Art of SQL , páginas 284-286:
Digamos que o nome da sua tabela seja
foo . Primeiro, crie uma tabela chamada
pivot :CREATE Table pivot (
count int
);
Insira nessas tabelas tantas linhas quantas colunas você deseja dinamizar em
foo . Como você tem três colunas em foo que você deseja dinamizar, crie três linhas na tabela dinâmica:insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Agora faça uma junção cartesiana entre
foo e pivot , usando um CASE para selecionar a coluna correta com base na contagem:SELECT foo.id, Case pivot.count
When 1 Then cat
When 2 Then one_above
When 3 Then top_level
End Case
FROM foo JOIN pivot;
Isso deve lhe dar o que você quer.