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;
Другие вопросы по тегам