sql >> データベース >  >> RDS >> Mysql

mysqlでテーブルの行を列に変換する

    item_idの値が2つしかない場合 、その後、値をハードコーディングすることは問題ありません。例

    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
    

    それ以外の場合、スコアの数がわからない場合は、Dynamic SQL 非常に好まれます。

    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;
    

    どちらのクエリも同じ出力になります

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


    1. MariaDBにテーブルが存在するかどうかを確認する4つの方法

    2. データ管理システムの利点は何ですか?

    3. mysqlで整数のランキングを見つける

    4. mysqlの変更innodb_large_prefix