sql >> Database >  >> RDS >> Mysql

tabelrijen omzetten in kolommen in mysql

Als u slechts twee waarden heeft voor item_id , dan is het prima om waarden hard te coderen. Voorbeeld

SELECT  a.Name AS Student_Name,
        MAX(CASE WHEN item_id = '01' THEN b.score END) Item_1_Score,
        MAX(CASE WHEN item_id = '02' THEN b.score END) Item_2_Score
FROM    student_info a
        LEFT JOIN scores b
            ON a.id = b.student_ID
GROUP   BY a.Name

Anders, als u een onbekend aantal scores heeft, een Dynamic SQL heeft veel de voorkeur.

SELECT  GROUP_CONCAT(DISTINCT
        CONCAT('MAX(CASE WHEN item_id = ''',
               item_id,
               ''' THEN Score END) AS ',
               CONCAT('`Item_', item_id, '_Score`')
               )) INTO @sql
FROM scores;

SET @sql = CONCAT('SELECT   a.Name AS Student_Name, ', @sql, ' 
                    FROM    student_info a
                            LEFT JOIN scores b
                                ON a.id = b.student_ID
                    GROUP   BY a.Name');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Beide zoekopdrachten zullen hetzelfde UITVOEREN

╔══════════════╦══════════════╦══════════════╗
║ STUDENT_NAME ║ ITEM_1_SCORE ║ ITEM_2_SCORE ║
╠══════════════╬══════════════╬══════════════╣
║ dan          ║           55 ║           44 ║
║ david        ║           66 ║           45 ║
║ jon          ║           37 ║           45 ║
╚══════════════╩══════════════╩══════════════╝


  1. Oracle-nummer naar C# decimaal

  2. Hoe org.hibernate.QueryException op te lossen:Niet alle genoemde parameters zijn ingesteld fout?

  3. Kan utf8mb4-tekenset niet gebruiken met CloudSQL op AppEngine Python

  4. Cloud Disaster Recovery voor MariaDB en MySQL