web-dev-qa-db-ja.com

複数の行データを複数の列を持つ行に取得する方法

次のようなMySQLテーブルがあります。

User_Id  course_name     course_location   course_id
1        course name 1   location 1        1
1        course name 2   location 2        2
1        course name 3   location 1        3
2        course name 2   location 1        2
2        course name 4   location 4        4

次のような結果をデータで取得するにはどうすればよいですか。

User_id  course 1       course2        course3        course4
1        yes-location1  yes-location2  yes-location1  NULL
2        NULL           yes-location1  NULL           yes-location4
8
Lanw

_GROUP BY_とMAX集計を使用してデータをピボットし、CASEを使用して_User_id_でフィルタリングする必要があります。

クエリ:

_SELECT User_id
    , MAX(
        CASE WHEN course_id = 1 THEN course_location END
    ) as Course_1
    , MAX(CASE WHEN course_id = 2 THEN course_location END) as Course_2
    , MAX(CASE WHEN course_id = 3 THEN course_location END) as Course_3
    , MAX(CASE WHEN course_id = 4 THEN course_location END) as Course_4
FROM data
GROUP BY User_id;
_

SQL Fiddle のサンプルクエリ。

_course_location_をCONCAT('YES-', course_location)で置き換えることができます_は先頭のYESが本当に必要です。

出力:

_User_Id | Course_1      | Course_2      | Course_3      | Course_4
1       | location 1    | location 2    | location 1    | (null)
2       | (null)        | location 1    | (null)        | location 4
_
7