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

MySQLは複数の行を列として結合します

    INNER JOIN あなたのニーズで十分です。 MySQLにはPIVOTがありません あなたによる機能はまだCASEを使用してそれをシミュレートすることができます およびMAX() 機能。

    SELECT  a.ID, a.NAME,
            MAX(CASE WHEN b.Race_Number = 1 THEN b.Place ELSE NULL END) Race1,
            MAX(CASE WHEN b.Race_Number = 2 THEN b.Place ELSE NULL END) Race2,
            MAX(CASE WHEN b.Race_Number = 3 THEN b.Place ELSE NULL END) Race3
    FROM    Table1 a
            INNER JOIN Table2 b
                ON a.ID = b.ID
    GROUP   BY a.ID, a.Name
    

    ただし、RACEの数が不明な場合 、次にDYNAMIC SQL はるかに好ましい。

    SET @sql = NULL;
    SELECT
        GROUP_CONCAT(DISTINCT
        CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
          ' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
        ) INTO @sql
    FROM Table2;
    
    SET @sql = CONCAT('SELECT s.Student_name, ', @sql, ' 
                       FROM Table1 a
                       LEFT JOIN Table2 b 
                            ON ON a.ID = b.ID
                       GROUP   BY a.ID, a.Name');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    



    1. T-SQLで月末を取得する方法

    2. PostgreSQLのPercona分布の監視-主要な指標

    3. mysqlのプリペアドステートメントを使用する方が、一般的なエスケープ関数を使用するよりも安全なのはなぜですか?

    4. ProxySQLノードのパフォーマンスはどれくらいですか?