sql >> Databasteknik >  >> RDS >> Mysql

MySQL Gå med i flera rader som kolumner

En INNER JOIN kommer att räcka till dina behov. MySQL har ingen PIVOT funktion av att du fortfarande kan simulera den med CASE och MAX() funktion.

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

Men om du har okänt antal RACE , sedan en DYNAMIC SQL är mycket mer att föredra.

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. Hur man importerar en MySQL-dump från kommandoraden MED överskrivning

  2. Hur håller data inte sorteras?

  3. Få senast infogade ID från MySQL i Yii

  4. Eliminera PostgreSQL Split-Brain i Multi-Cloud-databaser