Wyciągnąłem to z książki Sztuka SQL , strony 284-286:
Załóżmy, że nazwa Twojej tabeli to foo
.
Najpierw utwórz tabelę o nazwie pivot
:
CREATE Table pivot (
count int
);
Wstaw do tej tabeli tyle wierszy, ile jest kolumn, które chcesz przestawić w foo
. Ponieważ masz trzy kolumny w foo
które chcesz przestawić, utwórz trzy wiersze w tabeli przestawnej:
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Teraz wykonaj połączenie kartezjańskie między foo
i pivot
, używając CASE
aby wybrać właściwą kolumnę na podstawie liczby:
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;
To powinno dać ci to, czego chcesz.