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

別の列の異なる値に同じ列を選択する

    (テーブルAC_XXXXからのテストデータを提供しなかったため、テストされていません ):
    (Oracle 11 PIVOT句を使用)

    select *
    from   ( select emp_id, seq_nr, name
             from   ac_xxxx
             where  emp_id = '874830' )
    pivot ( max(name) for seq_nr in (3 as seq3name, 4 as seq4name, 21 as seq21name,
                          22 as seq22name, 23 as seq23name, 24 as seq24name, 25 as seq25name)
          )
    ;
    

    Oracle 10以前の場合、ピボットは次のように「手動で」実行されていました。

    select max(emp_id) as emp_id,               --  Corrected based on comment from OP
           max(case when seq_nr = 3 then name end) as seq3name,
           max(case when seq_nr = 4 then name end) as seq4name,
        --   etc. (similar expressions for the other seq_nr)
    from   ac_xxxx
    where  emp_id = '874830'
    ;
    

    または、emp_id max()内にある必要はありません group by emp_idを追加した場合 -これは、WHERE句がなくても、別の関連する質問に対して機能します。




    1. mysql group byを使用して、最小値を返し、対応する行データを取得します

    2. 時間部分を無視してDATETIMEとDATEを比較します

    3. MySQLで主キーのインデックスが自動的に作成されますか?

    4. 接続文字列が正しくないため、AzureMySQLサーバーへの接続が失敗します