sql >> Database >  >> RDS >> Mysql

MySQL Voeg meerdere rijen samen als kolommen

Een INNER JOIN zal voldoende zijn voor uw behoeften. MySQL heeft geen PIVOT functie door je kunt het nog steeds simuleren met behulp van CASE en MAX() functie.

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

Maar als u een onbekend aantal RACE . heeft , dan een DYNAMIC SQL heeft veel meer de voorkeur.

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. PostgreSQL-fout:relatie bestaat al

  2. Fix Msg 529 "Expliciete conversie van gegevenstype int naar xml is niet toegestaan" in SQL Server

  3. Kan ik een enkele tabel herstellen vanuit een volledig mysql mysqldump-bestand?

  4. Een variabele doorgeven aan een trigger