Jeg fik det ud af bogen The Art of SQL , side 284-286:
Lad os sige, at dit bordnavn er foo
.
Først skal du oprette en tabel kaldet pivot
:
CREATE Table pivot (
count int
);
Indsæt lige så mange rækker i tabellerne, som der er kolonner, som du vil pivotere i foo
. Da du har tre kolonner i foo
at du vil pivotere, skal du oprette tre rækker i pivottabellen:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Lav nu en kartesisk join mellem foo
og pivot
, ved hjælp af en CASE
for at vælge den korrekte kolonne baseret på antallet:
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;
Dette burde give dig, hvad du ønsker.