Postgresql SQL для поиска дохода от другого отдела по номеру счета
Мне нужно найти доход врачей из разных отделений, таких как лаборатория, радиология, аптека и другие отделения через пациентов.
У меня есть только столбец document_number, где значения записаны как "L1432", "R87j7", "P652" и т. Д. Если doc_no начинается с "L", то это лабораторный, если doc_no начинается с "R", то это рентгенология, если doc_no начинается с "P", то это аптека. Как я могу сделать это в SQL?
Вывод должен выглядеть так:
doctor_name laboratory radiology pharmacy others
Michel 23098 6763 78732 98838
John 77838 89898 56542 52654
Cranys 98973 78763 5432 65565
1 ответ
Это условная агрегация по первому символу document_number:
select doctor_name,
sum(turnover) filter (where left(document_number,1) = 'L') as laboratory,
sum(turnover) filter (where left(document_number,1) = 'R') as radiology,
sum(turnover) filter (where left(document_number,1) = 'P') as pharmacy,
sum(turnover) filter (where left(document_number,1) not in ('L','R','P')) as others
from the_table
group by doctor_name
order by doctor_name;