it-swarm.com.de

So erhalten Sie mehrere Zeilendaten in eine Zeile mit mehreren Spalten

Ich habe eine MySQL-Tabelle wie diese:

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

Wie kann ich Daten wie folgt erhalten:

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

Sie müssen Daten mit GROUP BY Mit MAX aggregieren und mit CASE filtern, um nach User_id Zu filtern.

Abfrage:

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;

Beispielabfrage in SQL Fiddle .

Sie können course_location Durch CONCAT('YES-', course_location) ersetzen. Ist das führende YES, das tatsächlich benötigt wird.

Ausgabe:

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