2015-10-19 88 views
0

如果我运行的是工资单报表,我拥有普通员工,其工资分为两个不同的部门。因此,基本上,一名员工的薪资费用将按我的报告分摊50%,因为我不计算其他50%(这些工资费用计入其他部门)Postgresql在同一列中的值分配

但是,导演监督(例如)8因此报告中她的薪酬成本分摊12.5%。

对于报告,我增加了员工50%的成本,但我不知道如何在同一列中添加董事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%,E999的12.5%。

回答

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" 

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

+0

谢谢。错误:列“Transactions.Type”必须出现在GROUP BY子句中或用于聚合函数中 LINE 3:当在“E001”,“E002 ','E003','E004')然后是0.5 * ... ^ **********错误********** 错误:列“Transactions.Type “必须出现在GROUP BY子句中或用于聚合函数中 SQL状态:42803 字符:55 – Piechartking

+0

您好,在原始查询中没有分组,因此我认为您不需要帮助。在原始查询中应用相同的group by子句必须修复您遇到的错误。 – Nick

+0

我会尽力,谢谢。 – Piechartking