sqlserver2008 case when then else end


在寫sql語句的時候,有時候我們需要對字段的只進行判斷計算。查看了下相關文檔在sql2012、sql2014里邊可以使用  IIF 函數直接完成。

但是現在我需要在sql2008版本中完成最字段的計算。

需求分析:有這樣一張表

我這有這么個需求我要得到(FirstEnd-FirstBegin)+ (SecondEnd+SecondBegin)的值(取得有多少個號可以使用)。

看數據表:按照上邊的公式我們得到的值是:12999 這個數對嗎?

舉個例子 FirstBegin = 1 FirstEnd = 10 SecondBegin = 11 SecondEnd = 20  計算一下:18

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

自己來數下號碼數是 20 個,怎樣,我們的公式顯然少了2個。所以我們的公式變成了:

(FirstEnd-FirstBegin+1)+ (SecondEnd+SecondBegin+1)

但是這樣還不行,假如SecondEnd+SecondBegin = 0的話,那么總數會多1.所以這里邊我們需要對SecondEnd+SecondBegin差值做下判斷。

  • 實現SecondEnd+SecondBegin=0的話,公式(FirstEnd-FirstBegin+1)ok;
  • SecondEnd+SecondBegin!=0的話,公式 (FirstEnd-FirstBegin+1)+(SecondEnd+SecondBegin+1)ok;

要實現以上的需求:要用到 CASE WHEN THEN  ELSE END

看sql語句:

select 
    case when SecondEnd-SecondBegin=0 
    then (FirstEnd-FirstBegin) + 1 
    else (FirstEnd-FirstBegin + 1) + (SecondEnd-SecondBegin)+1
    end regular
from T_VoucherInfo WHERE TypeCode = 1 AND OrganizationCode = '001';

以上就完成了我的需求,覺得還是很好用的。如果您有什么好的寫法和建議,歡迎討論。


免責聲明!

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



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