Jag fick det här ur boken The Art of SQL , sidorna 284-286:
Låt oss säga att ditt bordsnamn är foo
.
Skapa först en tabell som heter pivot
:
CREATE Table pivot (
count int
);
Infoga i tabellen så många rader som det finns kolumner som du vill pivotera i foo
. Eftersom du har tre kolumner i foo
att du vill pivotera, skapa tre rader i pivottabellen:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Gör nu en kartesisk koppling mellan foo
och pivot
, med en CASE
för att välja rätt kolumn baserat på antalet:
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;
Detta bör ge dig vad du vill ha.