L'ho preso dal libro The Art of SQL , pagine 284-286:
Supponiamo che il nome del tuo tavolo sia foo .
Per prima cosa, crea una tabella chiamata pivot :
CREATE Table pivot (
count int
);
Inserisci in quelle tabelle tante righe quante sono le colonne che vuoi ruotare in foo . Dato che hai tre colonne in foo che vuoi trasformare, crea tre righe nella tabella pivot:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Ora fai un join cartesiano tra foo e pivot , utilizzando un CASE per selezionare la colonna corretta in base al conteggio:
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;
Questo dovrebbe darti quello che vuoi.