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

MySQL spojte více řádků jako sloupce

INNER JOIN bude stačit vašim potřebám. MySQL nemá žádný PIVOT funkci můžete stále simulovat pomocí CASE a MAX() funkce.

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

Ale pokud máte neznámé číslo RACE a poté DYNAMIC SQL je mnohem preferovanější.

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. Vyhledejte řetězec v celé tabulce v mySQL

  2. Proč INSERT IGNORE zvyšuje primární klíč auto_increment?

  3. Jak vyplnit číslo úvodními nulami v MariaDB

  4. Deset běžných hrozeb pro kvalitu plánu provádění