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

Posted

技术标签:

【中文标题】Postgresql SQL在发票号上查找不同部门的收入【英文标题】:Postgresql SQL to find revenue from different department on invoice number 【发布时间】:2017-03-10 23:35:30 【问题描述】:

我需要通过病人找到实验室、放射科、药房等各个部门的医生收入。

我只有 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

【问题讨论】:

您的数据模型有缺陷。将逻辑放入键中并不是一个好主意。您的表应该有一个正确的外键指向 departments 【参考方案1】:

这是按文档编号的第一个字符进行的条件聚合:

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;

【讨论】:

以上是关于Postgresql SQL在发票号上查找不同部门的收入的主要内容,如果未能解决你的问题,请参考以下文章

查找不同时间间隔的票号的循环时间

sql 查找发票号码差距 - Buscar huecosennúmerosdefacturación

SQL查询以查找具有部门名称的位置以及没有部门的位置

在 postgresql 表中查找最大条目,sql

应用移动端发票识别技术,实现了移动报销业务

SQL 按小时获取不同的客户计数