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‘;

以上就完成了我的需求,觉得还是很好用的。如果您有什么好的写法和建议,欢迎讨论。

时间: 2024-11-05 03:39:39

sqlserver2008 case when then else end的相关文章

sql 语句之 case

case语句语法: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 首先创建一张users表,其中包含id,name,sex三个字段,表内容如下: 复制代码 SQL> drop table users purge; drop table users p

case语法

语法: case "字符串变量" in 值1)指令 ;; 值2)指令 ;; 值*)指令 ;; esac 下面我们来作一个小脚本: #!/bin/bash read -p "please input one the number:" a case "$a" in 1) echo "you input the number is 1" ;; 2) echo "you input the number is 2"

用case语句建立一个shell(功能是打开,关闭,重置,显示虚拟机)

#!/bin/bash case "$1" in start)                   /*当关键字为start时,执行打开虚拟机$2的语句 echo start $2 ... virsh start $2 &> /dev/null ;; poweroff)              /*当关键字为poweroff时,执行强制关闭虚拟机$2的语句 echo poweroff $2 ... virsh destroy $2 &> /dev/null

linux自学_shell脚本case详解

case都可以用if替换,唯一的区别是当变量有固定几个值的时候,语法比较整齐. 举例 企业常用启动一些程序的脚本 例一 : vi  apache.sh #!/bin/sh  case $1 in          start | begin)          /etc/init.d/httpd start         ;;          stop | end)              /etc/init.d/httpd stop         ;;          *)     

bash脚本编程之case语句及脚本选项进阶

case语句及脚本选项进阶详解     面向过程程序设计语言中的控制流(即程序当中的语句)默认是顺序执行的. 程序设计语言的控制结构一共有三类: 1,顺序结构 2,选择结构 (1)if语句 ->单分支的if语句 格式:if condition1;then expression ... fi ->双分支的if语句 格式:if condition1;then expression ... else expression ... fi ->多分支的if语句 格式:if condition1;t

shell编程中for,while,util,case,select,break, continue用法详解

关于shell脚本的更多详细实例讲解请参考:http://www.cnblogs.com/yuexiaxiaoxi/category/646749.html Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,有三种常用的循环语句:for.while和until.while循环和for循环属于"当型循环",而until属于"直到型循环".循环控制符:break和continue控制流程转向. 参考:<Linux 与unix shell 编程指

switch case 与 if

case 在编程中偶尔使用到switch case语句,对于case语句的处理,出现了两种错误,现总结如下: 1 case后必须是常量,不能使用‘<’或‘>’这种逻辑运算 2 case后如果是‘||’或者‘&&’逻辑运算,则实际是1或者0 #include <iostream> using namespace std; int main(int argc, char * argv[]) { int i; cin>>i; switch(i) { case

数据字典+匿名委托模拟switch/case功能

基本思想每个case的选择值作为键,处理过程做成函数委托存放进数据字典.用的时候根据之调用.下面上代码 封装的FuncSwitcher类 using System; using System.Collections.Generic; namespace Test {     class FuncSwitcher<T>     {         int count;         Dictionary<T, Delegate> FuncGather;         Delega

case语句脚本练习

#! /bin/sh # 加减乘除的小脚本,主要练习case语句 case $2 in +) echo "$1 + $3 = `expr $1 + $3` " ;; -) echo "$1 - $3 = `expr $1 - $3`" ;; \*) echo "$1 * $3 = `expr $1 \* $3`" ;; /) if [ $3 = 0 ] then echo "除数不能为0" else echo "$1