Oracle 11g предоставя PIVOT
операция, която прави това, което искате.
Разтвор на Oracle 11g
select * from
(select id, k, v from _kv)
pivot(max(v) for k in ('name', 'age', 'gender', 'status')
(Забележка:нямам копие на 11g, за да тествам това, така че не съм проверил неговата функционалност)
Получих това решение от:http://orafaq.com/wiki/PIVOT
РЕДАКТИРАНЕ – опция за центриране на xml (също Oracle 11g)
Очевидно има и pivot xml
опция, когато не знаете всички възможни заглавия на колони, които може да са ви необходими. (вижте ТИП XML раздел в долната част на страницата, разположен на http://www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html)
select * from
(select id, k, v from _kv)
pivot xml (max(v)
for k in (any) )
(Забележка:Както преди нямам копие на 11g, за да тествам това, така че не съм проверил неговата функционалност)
Редактиране 2: Променено v
в pivot
и pivot xml
оператори към max(v)
тъй като се предполага, че трябва да бъде обобщен, както е посочено в един от коментарите. Добавих и in
клауза, която не е по избор за pivot
. Разбира се, трябва да посочите стойностите в in
клаузата побеждава целта да има напълно динамична въртяща/кръстосана заявка, както беше желанието на плаката на този въпрос.