web-dev-qa-db-fra.com

Comment obtenir plusieurs données de ligne dans une ligne avec plusieurs colonnes

J'ai une table MySQL comme celle-ci:

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

Comment puis-je obtenir des données comme ceci:

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

Vous devez faire pivoter les données en utilisant GROUP BY Avec MAX agrégat et utiliser CASE pour filtrer par User_id.

Requete:

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;

Exemple de requête dans SQL Fiddle .

Vous pouvez remplacer course_location Par CONCAT('YES-', course_location) est le premier YES est en effet nécessaire.

Production:

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
Julien Vavasseur