sql >> データベース >  >> RDS >> Oracle

Oracleで行を列に動的にピボットする

    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で値を指定する必要があります 句は、この質問の投稿者の望みのように、完全に動的なピボット/クロス集計クエリを持つという目標を打ち破ります。



    1. ストアドプロシージャとアクセス許可-EXECUTEで十分ですか?

    2. JS日時をMySQL日時に変換する

    3. 小数点以下8桁の緯度/経度には、どのMySQLデータ型を使用する必要がありますか?

    4. シェルを使用してデータベースがPostgreSQLに存在するかどうかを確認します