Postgresql在同一列中分配值

时间:2015-10-19 12:20:20

标签: postgresql

如果我正在运行工资单报告,我有正常的员工,其薪酬分为两个不同的部门。所以基本上,一个员工的工资成本将分配给我的报告50%,因为我不算其他50%(这些工资成本计入其他部门)

然而,导演监督(例如)8个团队,因此她的工资成本按报告分配12.5%。

对于报告,我向员工添加了50%的费用,但我不知道如何在同一列中同时添加Director 12.5%的费用。我的代码是这样的,但我想知道如何调整它以便得到我需要的东西:

select 
 to_char("Date", 'YYYY') as "Date",
 case
   when "Type" in ('E001', 'E002', 'E003', 'E004') then 0.5 * sum ("Amount") filter (where "Type" in ('E001', 'E002', 'E003', 'E004'))
   when "Type" like 'E9%' then 0.125 * sum("Amount") filter (where "Type" like 'E9%')
 end as "Salaries Shared with Accounting"
 from "Transactions"
 group by 1
 order by min("Date");

正如您所看到的,这将为每位员工返回50%的工资单,但我无法将其输出为E001,E002,E003和E004的50%,并且还会增加12.5%的E999。

1 个答案:

答案 0 :(得分:1)

看起来数据模型不是为处理这个特定的用例而设计的,但使用条件查询有一个相当不愉快的解决方案:

select
        to_char("Date", 'YYYY') as "Date",
        case 
            when "Type" in ('E001', 'E002', 'E003', 'E004') then 0.5 * sum ("Ammount") filter (where "Type" in ('E001', 'E002', 'E003', 'E004')
            when "Type" like 'E9%' then 0.125 * sum("Ammount") filter (where "Type" like 'E9%'
        end as "Salaries Shared with Accounting"

然而,可能有一个更令人满意的解决方案涉及 window 功能。我相信可以完全自动化上面的计算,而不是每次有人获得额外的项目时更改查询。