Oracle 11gは、PIVOTを提供します やりたいことをする操作。
Oracle11gソリューション
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タイプを参照してください https://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のコピーがないため、その機能を検証していません)
Edit2: vを変更しました pivotで およびpivot xml max(v)へのステートメント コメントの1つに記載されているように集約されることになっているためです。 inも追加しました pivotではオプションではない句 。もちろん、inで値を指定する必要があります 句は、この質問の投稿者の望みのように、完全に動的なピボット/クロス集計クエリを持つという目標を打ち破ります。