sql >> Database teknologi >  >> RDS >> Mysql

MySQL Deltag i flere rækker som kolonner

En INNER JOIN vil være tilstrækkeligt til dine behov. MySQL har ingen PIVOT funktion ved at du stadig kan simulere den ved at bruge CASE og 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 hvis du har ukendt antal RACE , derefter en DYNAMIC SQL er meget mere foretrukket.

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. Den enkleste overgang fra MySQL til MySQLi

  2. mysql - Opdater automatisk forekomster i en anden tabel

  3. Betinget WHERE-klausul med CASE-sætning i Oracle

  4. konvertere klat til klat