oracle+case+when+null,Oracle学习笔记_06_CASE WHEN 用法介绍

1. CASE WHEN 表达式有两种形式

--简单Case函数

CASE sex

WHEN '' THEN '男'

WHEN '' THEN '女'

ELSE '其他' END

--Case搜索函数

CASE

WHEN sex = '' THEN '男'

WHEN sex = '' THEN '女'

ELSE '其他' END

2. CASE WHEN 在语句中不同位置的用法

2.1 SELECT CASE WHEN 用法

SELECT grade,

COUNT (

CASE

WHEN sex = 1 THEN 1 /*sex 1为男生,2位女生*/

ELSE NULL

END

) 男生数,

COUNT (

CASE

WHEN sex = 2 THEN 1

ELSE NULL

END

) 女生数

FROM students

GROUP BY grade;

2.3 WHERE CASE WHEN 用法

SELECT T2.*, T1.*

FROM T1, T2

WHERE ( CASE

WHEN T2.COMPARE_TYPE = 'A' AND

T1.SOME_TYPE LIKE 'NOTHING%' THEN 1

WHEN T2.COMPARE_TYPE != 'A' AND

T1.SOME_TYPE NOT LIKE 'NOTHING%' THEN 1

ELSE 0

END

) = 1

2.4 GROUP BY CASE WHEN 用法

SELECT

CASE

WHEN salary <= 500 THEN ''

WHEN salary > 500 AND salary <= 600 THEN ''

WHEN salary > 600 AND salary <= 800 THEN ''

WHEN salary > 800 AND salary <= 1000 THEN ''

ELSE NULL

END salary_class, -- 别名命名

COUNT(*)

FROM Table_A

GROUP BY

CASE

WHEN salary <= 500 THEN ''

WHEN salary > 500 AND salary <= 600 THEN ''

WHEN salary > 600 AND salary <= 800 THEN ''

WHEN salary > 800 AND salary <= 1000 THEN ''

ELSE NULL

END;

3.关于IF-THEN-ELSE的其他实现

3.1 DECODE() 函数

select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')

from employees;

貌似只有Oracle提供该函数,而且不支持ANSI SQL,语法上也没CASE WHEN清晰,个人不推荐使用。

3.2 在WHERE中特殊实现

SELECT T2.*, T1.*

FROM T1, T2

WHERE

( T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%' ) OR

(T2.COMPARE_TYPE != 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%')

这种方法也是在特殊情况下使用,要多注意逻辑,不要弄错。

附录:参考资料

Oracle学习笔记:11g服务介绍及哪些服务必须开启?

由于工作环境中oracle版本为10g,不支持行转列函数pivot,特在自己电脑上安装了oracle 11g,但因为不经常使用,便把服务自动启动给关闭了,只在需要使用时手动启动,因此记录一下需要启动的 ...

Oracle学习笔记—数据字典和常用命令(转载)

转载自: oracle常用数据字典和SQL语句总结 Oracle常用命令大全(很有用,做笔记) 一.Oracle数据字典 数据字典是Oracle存放有关数据库信息的地方,其用途是用来描述数据的.比如一 ...

jQuery学习笔记之Ajax用法详解

这篇文章主要介绍了jQuery学习笔记之Ajax用法,结合实例形式较为详细的分析总结了jQuery中ajax的相关使用技巧,包括ajax请求.载入.处理.传递等,需要的朋友可以参考下 本文实例讲述了j ...

oracle学习笔记第一天

oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字   1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)

Oracle学习笔记——点滴汇总

Oracle学习笔记——点滴汇总 http://www.botangdb.com/ Oracle GI = Grid Infrastructure = ASM + Cluster

Oracle学习笔记之四sp1,Oracle 11g的常用函数

从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

Oracle学习笔记之四,SQL语言入门

1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

Oracle 学习笔记(一)Oracle的基本介绍与语法

1.1 Oracle基础知识 1.1.1 介绍 Oracle数据库的主要特点: 支持多用户.大事务量的事务处理 在保持数据安全性和完整性方面性能优越 支持分布式数据处理 具有可移植性 1.1.2 Or ...

随机推荐

double 和 float

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位.但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言 ...

js&comma;jquery获取浏览器信息

1.js获取: 查看:window.navigator 2.jQuery获取: chrome firefox 推荐使用navigator获取userAgent然后去正则匹配 参考匹配规则:http:/ ...

javamail 收邮件并解析附件

package com.zz.mail; import java.io.*; import java.text.*; import java.util.*; import javax.mail.*; ...

C&num; WinForm判断Win7下是否是管理员身份运行

原文:C# WinForm判断Win7下是否是管理员身份运行 如果程序不是以管理员身份运行,操作本地文件会提示:System.UnauthorizedAccessException异常 Vista 和 ...

设计模式之 - 策略模式(Strategy Pattern)

引入:项目中涉及到工作流,当然这个工作流的实现是由用户根据不同的策略或者说方式传入处理这个事件的人的审批链,后台在存储过程中进行解析,然后生成最终的审批链,在系统中流转进行审批. 比如审批链: 张三 ...

读取pdf内容分页和全部

//读取pdf 全部内容public static String topdffile(String pdffile){ StringBuffer result = new StringBuffer() ...

Python 中 Iterator&lpar;迭代器&rpar;和Iterable&lpar;迭代对象&rpar;的区别

直接可以用作for循环的数据类型有以下几种: tuple.list.dict.str等, 上述数据类型可以用作for循环的叫做可迭代对象Iterable.可以使用isinstance判断一个对象是否是 ...

bootstrap-treeview 在 bootstrap 4 不兼容解决办法及使用

bootstrap-treeview 是bootstrap的一个树形插件,插件依赖: bootstrap/3.3.7 jquery/3.3.1 经过验证,它不可以在 bootstrap 高于 3.3. ...

Mysql 5&period;7 基于组复制&lpar;MySQL Group Replication&rpar; - 运维小结

之前介绍了Mysq主从同步的异步复制(默认模式).半同步复制.基于GTID复制.基于组提交和并行复制 (解决同步延迟),下面简单说下Mysql基于组复制(MySQL Group Replication ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值