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.