2017-01-30 2 views
1

Я даже не знаю, что я технически прошу, поэтому было грубо, пытаясь найти ответ. У меня этот запрос работает в MySQL, но переход на PostgreSQL был немного сложным.Результаты нескольких случаев с группой по

SELECT call.call_id, 
    SUM(CASE WHEN indicator.indicator_name = 'Appointment Set' THEN indicator_score.score_value ELSE '0' END) as "Appointment Set" , 
    SUM(CASE WHEN indicator.indicator_name = 'Ask for Business' THEN indicator_score.score_value ELSE '0' END) as "Ask for Business" 
FROM call 
JOIN indicator_score ON indicator_score.call_id = call.call_id 
JOIN indicator ON indicator.indicator_id = indicator_score.indicator_id 
JOIN org_unit ON org_unit.org_unit_id = call.org_unit_id 
WHERE call.org_unit_id IN (4147, 4153) 
group by call.call_id, indicator_name 

Каждый call_id может и должен иметь счет для обоих «Спросите для бизнеса» и «Назначение Set», но то, что я получаю один со счетом, а другой с «0».

call_id | Appointment Set | Ask for Business 
-------------------------------------------- 
3,001,144 |   0  |   89 
3,001,145 |  100  |   0 

То, что я ищу что-то вроде этого:

call_id | Appointment Set | Ask for Business 
-------------------------------------------- 
3,001,144 |  100  |   89 

Я также попробовал эту структуру, но я получаю тот же результат.

SELECT call.call_id, 
CASE indicator.indicator_name WHEN 'Appointment Set' THEN sum(indicator_score.score_value) ELSE '0' END as Appointment_Set , 
CASE indicator.indicator_name WHEN 'Ask for Business' THEN sum(indicator_score.score_value) ELSE '0' END as Ask_for_Business 
FROM call 
JOIN indicator_score ON indicator_score.call_id = call.call_id 
JOIN indicator ON indicator.indicator_id = indicator_score.indicator_id 
JOIN org_unit ON org_unit.org_unit_id = call.org_unit_id 
WHERE call.org_unit_id IN (4147, 4153) 
group by call.call_id, indicator_name 
+1

Проблема заключается в том, что 'call_id' отличается, так что вы получите два строки результата. Если бы это было то же самое, вы бы получили только одну строку результатов. Поэтому я думаю, что запрос работает так, как вы ожидаете. –

ответ

3

С

group by call.call_id, indicator_name 

вы получите за один call_id конечно два ряда, один для indicator_name = 'Назначение Набор', один для indicator_name = 'Ask для бизнеса'.

Если вы хотите одну строку для каждого call_id только, то только группа по call_id:

group by call.call_id 
Смежные вопросы