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 = '';
以上就完成了我的需求,觉得还是很好用的。如果您有什么好的写法和建议,欢迎讨论。
sqlserver2008 case when then else end的更多相关文章
- SQLServer2008 在where条件中使用CASE WHEN
create table #temp( id int identity(1,1), name varchar(20), startYear int, startMonth in ...
- SQLServer2008 关于CASE WHEN
CASE WHEN的两种格式 1.简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END 2.Case搜索函数 CASE ...
- SQLSERVER2008 存储过程基本语法
SQLSERVER2008 存储过程基本语法 来源:https://www.cnblogs.com/tlduck/p/5462399.html 一.定义变量--简单赋值declare @a intse ...
- C#中,switch case语句中多个值匹配一个代码块的写法
switch (num) { case 1: Response.Write("1"); break; case 2: case 3: Response.Write("2| ...
- Android Studio快捷键switch case 轻松转换为if else
Android Studio快捷键switch case 轻松转换为if else 今天碰到的问题,没有找到资料,后面找到了方法,这个记下来,转载请注明出处:http://www.cnblogs.co ...
- 你真的会玩SQL吗?Case也疯狂
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- java中的switch case
switch-case语句格式如下 switch(变量){ case 变量值1: //; break; case 变量值2: //...; break; ... case default: //... ...
- sql case when...then...else...end 选择判断
达到的需求为: 吓数收回日期为空:当接单日期不等于空和当天减接单日期大于3天时,为1,否则为0:当接单日期为空.最大发织交期不等于空和当天减去最大发织交期大于3天时,为1,否则为0:当接单日期和发织交 ...
- C# 中Switch case 返回不止用break
Switch(temp) { case "A": //跳出循环 break; case "B": //返回值 return var; case "C& ...
随机推荐
- ac automaton 专题
hdu2222 模板题 hdu2825 在ac自动机上的状压dp hdu3247 在ac自动机上bfs poj2778 求长度为n,不包含给定的m个字符串的任何一个的字符串的个数 其实就是求长度为n的 ...
- 扩展Log4j支持JNDI数据源
log4j.properties配置文件: log4j.rootLogger=INFO,db #使用log4j扩展支持JNDI数据源 log4j.appender.db=com.qdgswx.log4 ...
- 使用jquery 操作checkbox
checkbox 的全选与全不选以及获取选择的值. 效果: <!DOCTYPE html> <html lang="en"> <head> &l ...
- 自制单片机之十……AT89S51的上拉电阻问题
很多网友都问我AT89S51的P0口为什么要接一个上拉电阻.我就用一个篇幅来说一说 P0口和其它三个口的内部电路是不同的,如下图 P0口是接在两个三极管D0和D1之间的,而P1-P3口的上部是接一个电 ...
- Qt浅谈之四十九俄罗斯方块(代码来自网络)
一.简介 从网上下载了一个Qt实现的俄罗斯方块单机版的源码,觉得非常有意思,故以博客形式记录下来,以便慢慢来研究.在centos6.6下编译运行(注意程序运行需要读取pro目录的配置文件,若把编译目录 ...
- HDU 1402 A * B Problem Plus (FFT模板题)
FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...
- MyBatis魔法堂:Insert操作详解
一.前言 数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二. insert元素 属性详解 其属性如下: parameterType:入参的全限 ...
- 用java流方式判断文件类型
这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...
- html5 750 REM JS换算方法
在安卓手机低版本浏览器,如果进页面快速执行的话会出现计算宽度不正确的情况,解决方法是放在onload方法里面执行,但这种解决方式在一些高版本浏览器中会出现页面闪动,所以使用判断浏览器版本的方式来解决, ...
- [Oracle]Sqlplus连接成功,但pl/sql连接不成功,提示“ora-12145:无法解析指定的连接标识符”
Oracle客户端安装成功后,使用Net Manager配置成功,测试服务成功.使用Sqlplus连接成功.但使用pl/sql developer连接总是提示“ora-12145:无法解析指定的连接标 ...