2014-09-23 103 views
0
------------------------------------------ 
Id  | CaseId | FeeType |  Cost | 
----------------------------------------- 
1017796 | 2697789 |  29 |  50 
1018167 | 2697789 |  1 |  150 
1019493 | 2697789 |  15 |  30 
1017799 | 2697790 |  29 |  50 
1018168 | 2697790 |  1 |  150 
1019494 | 2697790 |  15 |  0 
----------------------------------------- 

我想要的輸出作爲 如果contrators費用等於0,那麼TotalFee應爲0,而不是總 AdminFee + SubFee + ContFee總與選擇的條件和組由

------------------------------------------------------------------ 
CaseId | AdminFee | SubFee | ContFee | TotalAdmin | TotalFee 
------------------------------------------------------------------ 
2697789 |  50 | 150 |  30 |  200 | 230 
------------------------------------------------------------------ 
2697790 |  50 | 150 |  0 |  200 | 0 
------------------------------------------------------------------ 

@" select distinct a.CaseID 
    , sum(CASE WHEN b.FeeType = 29 THEN b.Cost END) AS AdminFee 
    , sum(CASE WHEN b.FeeType = 1 THEN b.Cost END) AS SubFee 
    , sum(CASE WHEN b.FeeType = 15 THEN b.Cost END) AS ContFee 
    ,sum (case when b.FeeType IN (1, 29) then b.Cost END) as TotalAdmin 

From Fee a 
GROUP BY a.CaseId 

如何修改上面的select語句,以獲得總爲0,如果沒有承包費 ,如果有一個contractorFee則第t otalFee = AdminFee + SubFee + ContFee

+0

您正在使用哪些DBMS? Postgres的?甲骨文? DB2?火鳥? – 2017-01-16 22:08:07

回答

0

如果我深知,您可以使用ISNULL或COALESCE聲明:

ISNULL(場,值如果爲null) -

ISNULL(sum(CASE WHEN b.FeeType = 15 THEN b.Cost END) AS ContFee) 

或用例ISNULL:

CASE 
    IF b.FeeType != null THEN b.Cost 
    ELSE 0 
END AS ContFee 
+0

如果ContFee = 0(如果ContFee =值示例ContFee = 40,則總計費用爲AdminFee + SubFee + ContFee – 2014-09-23 14:47:11

+0

)情況下當ContFee <> 0時,我正在計算totalFee爲0如果ContFee = 0,那麼ContFee = 0那麼AdminFee + SubFee + ContFee ELSE 0 END – 2014-09-23 14:55:06

+0

不,這似乎不工作,因爲AdminFee,SubFee和ContFee作爲FeeType 1,15,29存儲在數據庫中,並且這些費率類型的費用存儲在費用下,其中AdminFee = 50,SubFee = 150和ContFee更改取決於承包商收費多少次,沒有ContFee,那是我們不想計算TotalAmt的時間 – 2014-09-23 15:21:20