Я даже не знаю, что я технически прошу, поэтому было грубо, пытаясь найти ответ. У меня этот запрос работает в 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
Проблема заключается в том, что 'call_id' отличается, так что вы получите два строки результата. Если бы это было то же самое, вы бы получили только одну строку результатов. Поэтому я думаю, что запрос работает так, как вы ожидаете. –