`
modabobo
  • 浏览: 511600 次
文章分类
社区版块
存档分类
最新评论

Oracle中的case when的使用

 
阅读更多

今天要用SQL实现一个小小的逻辑,总之呢,需要用到一些判断条件,所以准备使用一下

case when的用法,但是由于之前只写过case when else end单条语句,没有写过嵌套,而且

感觉sql写起来也不好调试,所以在网上找了下资料。

第一步,先写一个简单的嵌套测试一下:

select case when 1=1 then 
		case when 2<3 then
        		'2A'
        	else
          		'2B'  
        	end
       else '1A'
       end
from dual;

执行完毕,显示"2A"。于是在一步步往上面加,根据其语法,我们可以观察得出每一个case都要对应一个end结束符,else条件可要

可不要,与编程语言里面的if和else是相似的,那么现在实现一个这样的算法:

if(i > A && i< B){
	if(i - A > B - i){
		if(B - i > 0){
			return 60;
		}else{
			return B - i;
		}
	}else{
		if(i - A > 0){
			return 60;
		}else{
			i - A;
		}
	}
}else{
	return 0;
}

看看这个够复杂了吧,下面是实现后的SQL代码:

case when (A<i and B>i) then 
            case when i-A>B-i then
                case when B-i>0 then
                	60
                else
                	B-i
                end 
            else
                case when i-A>0 then
                  60
                else
                  i-A
                end
            end
        else 0
  end


只要注意格式就不会有问题了。

分享到:
评论

相关推荐

    oracle where case when where后面跟case when

    NULL 博文链接:https://vernonchen163.iteye.com/blog/1908053

    Oracle_case_when_用法

    详细讲解了case、when的用法.ASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE()类似,但应该使用CASE,因为它与ANSI兼容。

    oracle case when 语句的用法详解

    1. CASE WHEN 表达式有两种形式 代码如下:–简单Case函数 CASE sex ... CASE WHEN 在语句中不同位置的用法2.1 SELECT CASE WHEN 用法 代码如下:SELECT grade, COUNT (CASE WHEN sex = 1 THEN 1 /*sex 1为男生,2位

    case乱码解决

    mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法

    casewhen多条件oracle-casewhen(casewhen同时满足多条件).pdf

    casewhen多条件oracle-casewhen(casewhen同时满足多条件).pdf

    case when then语句用法

    该语句的执行过程是:将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。当CASE语句中不...

    Oracle中查找和删除重复记录方法

    删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...

    Oracle Exception汇总(自定义Oracle异常)

    使用CASE语句时在WHEN子句中没有包含必需的条件分支,并且没有包含ELSE语句。 对应ORA-06592错误。 COLLECTION_IS_NULL 给集合元素赋值前,必需初始化集合元素。对应ORA-06531错误。 CURSOR_ALRADY_OPEN 重新打开...

    Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)

    Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)

    ORACLE多条件统计查询的简单方法

    然后有一种语法让我眼前一亮,case when then else end 当满足CASE设定的条件时,就可以执行then语句。由于我要做的分组查询统计,是要罗列每一种情况,而且根据输入的“管理员编号”不同返回不同结果,结果记录的...

    sql.txt 存储过程行列转置(oracle)

    oracle 存储过程,实现列表数据行转置成列显示table效果;用游标的方式实现;

    Oracle用decode函数或CASE-WHEN实现自定义排序

    主要介绍了Oracle用decode函数或CASE-WHEN实现自定义排序功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    金融道德关于oracle case的

    When upbraided by the financial community and losing ground in press, Oracle quickly raised its bid to $19.5, obviously, at the beginning, Oracle just wanted to cripple PeopleSoft as a competitor for...

    Oracle中的SUM用法讲解

    Oracle中的SUM条件查询 1、按照区域编码分组查询区域编码、IPTV_NBR不为空的数量、ACC_NBR不为空的数量、所有用户数量 SELECT AREA_CODE, SUM ( CASE WHEN IPTV_NBR IS NULL or IPTV_NBR = '' THEN 0 ELSE 1 END ),...

    Oracle Sql 性能优化

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...

    习惯了oracle10g写法的朋友们注意了,oralce11g有变化了,小谈空字符串与null的区别

    场景:以前oracle10g的时候习惯使用case when nvl(字段,‘’)=‘’ then …取值1 else 取值2 end ,在oralce11g也这么写的时候,你会发现,所有取值都会取值2,不会取到取值1,为什么呢? 这是因为oracle中字段时空...

    oracle_sql使用.docx

    Case When实现行列转换时会出现多条记录,如果不用聚合函数直接进行group by分组,那么检索的是基表里分组字段的第一条记录,如果使用max()函数之后再进行group by分组,那么就会检索每个字段的最大值然后再分组

Global site tag (gtag.js) - Google Analytics