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.