今天要用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
只要注意格式就不会有问题了。
分享到:
相关推荐
NULL 博文链接:https://vernonchen163.iteye.com/blog/1908053
详细讲解了case、when的用法.ASE表达式可以在SQL中实现if-then-else型的逻辑,而不必使用PL/SQL。CASE的工作方式与DECODE()类似,但应该使用CASE,因为它与ANSI兼容。
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位
mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法
casewhen多条件oracle-casewhen(casewhen同时满足多条件).pdf
该语句的执行过程是:将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。当CASE语句中不...
删除重复记录的方法原理:在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会...
使用CASE语句时在WHEN子句中没有包含必需的条件分支,并且没有包含ELSE语句。 对应ORA-06592错误。 COLLECTION_IS_NULL 给集合元素赋值前,必需初始化集合元素。对应ORA-06531错误。 CURSOR_ALRADY_OPEN 重新打开...
Oracle sql文总结(case when,查看执行计画,文本操作,查看锁表及解锁,游标)
然后有一种语法让我眼前一亮,case when then else end 当满足CASE设定的条件时,就可以执行then语句。由于我要做的分组查询统计,是要罗列每一种情况,而且根据输入的“管理员编号”不同返回不同结果,结果记录的...
oracle 存储过程,实现列表数据行转置成列显示table效果;用游标的方式实现;
主要介绍了Oracle用decode函数或CASE-WHEN实现自定义排序功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
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条件查询 1、按照区域编码分组查询区域编码、IPTV_NBR不为空的数量、ACC_NBR不为空的数量、所有用户数量 SELECT AREA_CODE, SUM ( CASE WHEN IPTV_NBR IS NULL or IPTV_NBR = '' THEN 0 ELSE 1 END ),...
ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表...
场景:以前oracle10g的时候习惯使用case when nvl(字段,‘’)=‘’ then …取值1 else 取值2 end ,在oralce11g也这么写的时候,你会发现,所有取值都会取值2,不会取到取值1,为什么呢? 这是因为oracle中字段时空...
Case When实现行列转换时会出现多条记录,如果不用聚合函数直接进行group by分组,那么检索的是基表里分组字段的第一条记录,如果使用max()函数之后再进行group by分组,那么就会检索每个字段的最大值然后再分组