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

Oracleピボット演算子

    selectを発行しているという理由だけで、このような出力が得られます。 テーブルに対するステートメント(tbl テーブル)これには、行とpivotを一意に識別する列(たとえば、主キー列)が含まれていると思われます。 演算子はその列の値を考慮します。簡単な例を次に示します。

    /*assume it's your table tbl */
    with tbl(unique_col, col1, col2) as(
      select 1, 'a',  'a1' from dual union all
      select 2, 'b',  'b1' from dual union all
      select 3, 'c',  'c1' from dual
    )
    

    このようなテーブルに対するクエリは、質問で提供した出力(望ましくない出力)を提供します:

    select A,B 
      from tbl
    pivot(
      max(col2) for col1 in ('a' as A,'b' as B)
    )
    

    結果:

    A    B
    --   --
    a1   null   
    null b1
    

    目的の出力を生成するには、行に一意の値を持つ列を除外する必要があります:

    select A
         , B 
      from (select col1 
                 , col2  /*selecting only those columns we are interested in*/
               from tbl ) 
      pivot(
        max(col2) for col1 in ('a' as A,'b' as B)
      )
    

    結果:

    A  B
    -- --
    a1 b1 
    


    1. SQLite Max()のしくみ

    2. Linux上のSQLServer

    3. ヒントと例で説明されたOracleCaseステートメント

    4. Psycopg2を使用してPython辞書を挿入します