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.