2016-12-31 3 views
-1

У меня есть следующий MySQL QueryMySQL автообъединение возвращается пустые значения


select a.agency_name, a.green ,b.red, c.amber 
from (select count(action_status) as green, agency_name from tbl_actions 
where action_status='In Progress' group by agency_name) a 
join (select count(action_status) as red, agency_name from tbl_actions 
where action_status='Delayed' group by agency_name) b on a.agency_name=b.agency_name 
join (select count(action_status) as amber, agency_name from tbl_actions 
where act_status='Completed' group by agency_name) c on a.agency_name=c.agency_name 

и возвращают пустые значения, как blank values

У меня есть эти поля в БД заселенной с соответствующими данными.

+0

Не могли бы вы отформатировать свой запрос, чтобы мы могли его прочитать? –

+0

Этот запрос будет работать только в том случае, если по каждому типу 'act_status' за' agency_name' – GurV

+0

есть по крайней мере одна строка. Нет пустых значений, это пустой результат. –

ответ

2

Условные агрегации гораздо проще:

select a.agency_name, 
     sum(a.action_status = 'In Progress') as green, 
     sum(a.action_status = 'Delayed') as red, 
     sum(a.action_status = 'completed') as amber 
from tbl_actions a 
group by a.agency_name; 

Самосоединения не является необходимым. Причина, по которой вы не получаете строк в результирующем наборе, заключается в том, что ни одно агентство не имеет всех трех статусов.

+0

Большое спасибо, – Usman

Смежные вопросы