Saqué esto del libro The Art of SQL , páginas 284-286:
Digamos que el nombre de su tabla es foo
.
Primero, crea una tabla llamada pivot
:
CREATE Table pivot (
count int
);
Inserte en esas tablas tantas filas como columnas desee pivotar en foo
. Como tienes tres columnas en foo
que desea pivotar, cree tres filas en la tabla dinámica:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Ahora haz una unión cartesiana entre foo
y pivot
, usando un CASE
para seleccionar la columna correcta según el conteo:
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;
Esto debería darte lo que quieres.