Объединение уровней для пользователей с несколькими уровнями при использовании GROUP BY? - PullRequest
0 голосов
/ 19 мая 2019

Этот запрос выбирает следующее:

SELECT jobs.JobID, school.School_Name, 
       CONCAT(staff.First_Name, ' ', staff.Last_Name) AS 'Full_Name', 
       staff.Phone_Number, role.Role
  FROM jobs
 INNER JOIN school ON jobs.SchoolID=school.SchoolID
 INNER JOIN staff ON jobs.StaffID=staff.staffID
 INNER JOIN role ON jobs.roleID=role.roleID
 ORDER BY staff.StaffID asc


JOB ID  FULL NAME   ROLE
------  ---------   ----------
1       BOB         PRINCIPLE
2       BOB         TEACHER
3       JACK        TEACHER
4       SARAH       ACCOUNTANT
5       SARAH       NURSE

Тем не менее, я хочу, чтобы результаты выглядели так:

BOB     PRINCIPLE, TEACHER
JACK    TEACHER
SARAH   ACCOUNTANT, NURSE

Я запутался в том, как объединить это, например, добавивпредложение GROUP BY, оно выбирает только самый первый JobID?

Любая помощь приветствуется, спасибо.

1 Ответ

1 голос
/ 19 мая 2019

Вы можете использовать GROUP_CONCAT

SELECT Full_Name, GROUP_CONCAT(Role) AS Role
  FROM
 (
  SELECT jobs.JobID, school.School_Name, CONCAT(staff.First_Name, ' ', staff.Last_Name) 
     AS Full_Name, staff.Phone_Number, role.Role
    FROM jobs
   INNER JOIN school ON jobs.SchoolID=school.SchoolID
   INNER JOIN staff ON jobs.StaffID=staff.staffID
   INNER JOIN role ON jobs.roleID=role.roleID
   ORDER BY staff.StaffID asc
 ) q
GROUP BY Full_Name
...