I have the following query:
SELECT folders.name folder, s.name `schedule`, ms.month as 'month', concat(s.start, " - ", s.end) `time`,
p.name 'profession', (select count(*) from employees where profession_id = p.id) as "count_employees"
FROM schedules s
JOIN folders ON folders.id = s.folder_id
JOIN month_schedules ms ON ms.schedule_id = s.id
LEFT JOIN schedule_professions sp ON sp.schedule_id = s.id
JOIN professions p ON p.id = sp.profession_id
WHERE s.company_id = 82 AND ms.year = 2021 AND ms.month = 2
This query returns the following table
folder | schedule | month | time | profession | count_employees |
---|---|---|---|---|---|
folder_a | schedule_a | 2 | 0 | profession_a | 3 |
folder_a | schedule_a | 2 | 0 | profession_b | 5 |
folder_a | schedule_a | 2 | 0 | profession_c | 1 |
folder_a | schedule_b | 2 | 0 | profession_a | 1 |
folder_a | schedule_b | 2 | 0 | profession_b | 0 |
folder_a | schedule_b | 2 | 0 | profession_c | 0 |
but what I want is this:
folder | schedule | month | time | profession_a | profession_b | profession_c |
---|---|---|---|---|---|---|
folder_a | schedule_a | 2 | 0 | 3 | 5 | 1 |
folder_a | schedule_b | 2 | 0 | 1 | 0 | 0 |
The number of professions is unknown, so has to be dynamically calculated.
I tried using GROUP_CONCAT and CONCAT, but I'm a newbie with SQL, so I didn't have any success.