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

ORACLEの行から列へ

    select name,id, 
     max(case when groupa = 'A' then groupa end) as group1,
      max(case when groupa = 'B' then groupa end) as group2,
      max( case when groupa = 'C' then groupa end) as group3
       from tablename
       group by name, id
    

    groupaの数が固定されている場合、上記のクエリは機能します。

    編集:ピボットの使用

     select * from
      (select name, id , groupa from tablename)
      pivot xml (
      max(groupa) for groupa in
       (select distinct groupa from tablename)
       )
    

    解決してくれてありがとう。もうすぐです。これは、このクエリを実行した後に取得するものです。実際には53の異なるグループがあるため、53の列が追加されていますが、ユーザーに割り当てられるグループの最大数は5です。

    NAME      ID      A      B      C     D      E      F      G      H
    James     20      A      null   null  null   null   null   null   H
    Michael   30      A      B      null  null   E      null   null   null
    

    このような結果を得るにはどうすればよいですか...

    NAME      ID      GROUP_1  GROUP_2  GROUP_3
    James     20      A        H
    Michael   30      A        B        E
    

    質問で述べたように、どうすれば結果を得ることができますか?ありがとうございます



    1. GROUPBY特定の条件と日付の行のみ

    2. MariaDBで照合を表示する

    3. Pythonでcallprocを使用して、レコードのコレクションを含むストアドプロシージャを呼び出します

    4. MySQLでUNIX_TIMESTAMPのデフォルトで列を作成することは可能ですか?