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

SQL:MySQLで行を列に変換します(SELECTステートメント)

    このタイプのピボットには変数を使用できますが、各順序の値を列挙する必要があるため、クエリは少し複雑になります。

    SELECT o.order_id,
           MAX(case when rank = 1 then created_at end) as created_at_1,
           MAX(case when rank = 1 then email end) as email_1,
           MAX(case when rank = 1 then content end) as content_1,
           MAX(case when rank = 2 then created_at end) as created_at_2,
           MAX(case when rank = 2 then email end) as email_2,
           MAX(case when rank = 2 then content end) as content_2,
    FROM orders o LEFT JOIN
         (SELECT oc.*,
                 (@rn := if(@o = order_fk, @rn + 1,
                            if(@o := order_fk, 1, 1)
                           )
                 ) as rank
          FROM order_comments oc CROSS JOIN
               (SELECT @rn := 0, @o := 0) vars
          ORDER BY order_fk, created_at
         ) oc
         ON o.order_id = oc.order_fk
    GROUP BY o.order_id;
    



    1. Xampp; Apacheポート80ビジー

    2. SQLServerで100万行を削除する

    3. resultSetから日付を取得する方法

    4. オンプレミスのセキュリティ制御と主要なクラウドプロバイダーのマッピング–バージョン4.0