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