2015-10-19 45 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