與查詢放到一塊使用:
語法:
select case when 范圍條件 then 產生的結果 when 范圍條件 then 產生的結果 else 不是以上范圍產生的結果 end from 表名
個人理解:
在英文中 case 表示事件, when 表示 什么時候,then 表示那時,當時,
else 表示否則,,end 表示 結束
那么就可以理解為 一件事的發生,有很多的事件段,在不同的時間段有不同的結果,可以用多個時間段和else 表示完整的事件,最后聲明結束。
來個例子:一張表
使用case when 算所得稅,工資小於等於三千不扣錢,在三千和四千之間(包含四千)扣200,在四千和五千之間(包含五千)扣400,五千以上扣800
也可以使用工資減去稅收,計算實發
當這個事件是一個完整的事件的時候也可以,根據條件算總數平均數之類
計算 :表中學歷是本科的總工資和職稱是實習生的平均工資
這個時候else 也就不起作用了,可不寫
代碼:
select Name,Gongzi, (Gongzi-(case when GongZi < =3000 then 0 when (Gongzi >3000 and GongZi<= 4000) then 200 when (Gongzi >4000 and GongZi<= 5000) then 400 else 800 end)) as ShifaGongz from dbo.obgexinzi select sum (case when XueLi = '本科' then GongZi else 0 end) as benkezonggongzi, avg (case when ZhiCheng ='實習生' then GongZi end) as shixishenggongzi from dbo.obgexinzi
計算工資簡單使用
select UserName, Exp_Decimal_01,Exp_Decimal_02,Exp_Decimal_04,Exp_Decimal_05,UserBankMark, (Exp_Decimal_01+Exp_Decimal_02) as Exp_Decimal_03, (Exp_Decimal_04+Exp_Decimal_05) as Exp_Decimal_06, (case when (UserBankMark is null or UserBankMark='') then 0 else (Exp_Decimal_01+Exp_Decimal_02)-(Exp_Decimal_04+Exp_Decimal_05) end) as Exp_Decimal_07, (case when not(UserBankMark is null or UserBankMark='') then 0 else (Exp_Decimal_01+Exp_Decimal_02)-(Exp_Decimal_04+Exp_Decimal_05) end) as Exp_Decimal_08 from tbmdGongZiList