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.