Можно ли с помощью sql-запроса создать группу отчетов по имени с подсчетом по статусу.
Таблицы:
Мне нужно сделать отчет, считать по статусной группе по сервису:
Результаты столбцов: название службы, название статуса 1, название статуса 2, название статуса 3, итог
Результаты строк:
service name 1, 30, 10, 20, 60
service name 2, 10, 5, 40, 55
service name 3, 0, 2, 8, 10
Кажется, вам нужны соединения и условная агрегация:
select se.name as service_name,
sum(case when st.name = 'status 1' then 1 else 0 end) as cnt_status_1,
sum(case when st.name = 'status 2' then 1 else 0 end) as cnt_status_2,
sum(case when st.name = 'status 3' then 1 else 0 end) as cnt_status_3,
count(*) as total
from project p
inner join status st on st.id = p.status_id
inner join service se on se.id = p.service_id
group by se.id, se.name
Хорошо работает, но если у меня есть 10 «имя статуса», мне нужно дублировать строку «сумма» для каждого другого статуса? Есть ли способ автоматического суммирования/подсчета для каждого используемого статуса?
@BasicCoder: нет, не в стандартном SQL. Вам понадобится динамический SQL, который намного сложнее.
Можете ли вы добавить некоторые значения, чтобы сделать пример понятным?