sql >> Databáze >  >> RDS >> Mysql

SQL:transformace řádků na sloupce v MySQL (příkaz SELECT)

Pro tento typ pivotu můžete použít proměnné, ale dotaz je trochu složitější, protože je potřeba vyčíslit hodnoty pro každou objednávku:

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. Výjimka MySQLSyntaxError při pokusu o provedení PreparedStatement

  2. Ochrana injekcí MySQL a známky zranitelnosti pomocí PHP

  3. Nejlepší funkce, které je třeba hledat v nástroji pro monitorování serveru SQL

  4. Výběr všech záznamů pomocí dotazu SQL LIMIT a OFFSET