在寫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';
以上就完成了我的需求,覺得還是很好用的。如果您有什么好的寫法和建議,歡迎討論。