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';
以上就完成了我的需求,觉得还是很好用的。如果您有什么好的写法和建议,欢迎讨论。