SQL - несколько условий для одного столбца, вывод в разные столбцы

Есть два запроса, которые нужно объединить в один SELECT otdel, COUNT(id_task )as c1 FROM `task` WHERE status_task=0 GROUP BY otdel ORDER BY otdel и SELECT otdel, COUNT(id_task )as c2 FROM `task` WHERE status_task=2 GROUP BY otdel ORDER BY otdel

В результате должна получиться таблица:

otdel c1 c2
1 5 Null
2 2 3
3 Null 3

Вместо Null можно 0. Заранее спасибо.


Ответы (2 шт):

Автор решения: Герман Борисов

Стандартный прием «Разворот CASE'ом»

SELECT
  otdel,
  SUM(CASE WHEN status_task=0 THEN 1 END) AS c1,
  SUM(CASE WHEN status_task=2 THEN 1 END) AS c2
FROM `task`
GROUP BY otdel
ORDER BY otdel

В некоторых СУБД для этого есть отдельная команда PIVOT

→ Ссылка
Автор решения: Alex Khvostyak

Вот такое решение получилось, всем спасибо!

SELECT otdel,
    COUNT(CASE
            WHEN status_task = 0
                THEN status_task
            ELSE NULL
            END) as status0,
    COUNT(CASE
            WHEN status_task = 2 
                THEN status_task
            ELSE NULL
            END) as status2
FROM `task`
GROUP BY otdel
ORDER By otdel
→ Ссылка