Postgresql SQL在发票号上查找不同部门的收入

时间:2016-10-28 06:01:35

标签: sql postgresql conditional-aggregation

我需要通过患者从实验室,放射科,药房和其他部门等各个部门找到医生的收入。

我只有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 个答案:

答案 0 :(得分: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;