如何将多行数据放入多列的行中

Lan*_*anw 8 mysql pivot

我有一个像这样的 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
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到这样的数据:

User_id  course 1       course2        course3        course4
1        yes-location1  yes-location2  yes-location1  NULL
2        NULL           yes-location1  NULL           yes-location4
Run Code Online (Sandbox Code Playgroud)

Jul*_*eur 9

您必须使用GROUP BYwithMAX聚合透视数据并用于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;
Run Code Online (Sandbox Code Playgroud)

SQL Fiddle 中的示例查询。

您可以替换course_locationCONCAT('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
Run Code Online (Sandbox Code Playgroud)