Sql ----- sqlserver 中的if 判斷 case... when


與查詢放到一塊使用:

語法:

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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM