SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句。

CASE WHEN condition THEN result 
[WHEN ...] 
[ELSE result] 
END

CASE 子句可以用于任何表达式可以有效存在的地方。 condition 是一个返回boolean 的表达式。 如果结果为真,那么 CASE 表达式的结果就是符合条件的 result。 如果结果为假,那么以相同方式搜寻任何随后的 WHEN 子句。 如果没有 WHEN condition 为真,那么 case 表达式的结果就是在 ELSE 子句里的值。 如果省略了 ELSE 子句而且没有匹配的条件, 结果为 NULL。

  1. 例子:
  2. SELECT * FROM test;
  3. a
  4. ---
  5. 1
  6. 2
  7. 3
  8. SELECT a,
  9. CASE WHEN a=1 THEN 'one'
  10. WHEN a=2 THEN 'two'
  11. ELSE 'other'
  12. END
  13. FROM test;
  14. a | case
  15. ---+-------
  16. 1 | one
  17. 2 | two
  18. 3 | other

所有 result 表达式的数据的类型都必须可以转换成单一的输出类型。

下面这个"简单的" CASE 表达式是上面的通用形式的一个特殊的变种。

  1. CASE expression
  2. WHEN value THEN result
  3. [WHEN ...]
  4. [ELSE result]
  5. END

先计算 expression 的值, 然后与所有在WHEN 子句里声明的 value 对比,直到找到一个相等的。 如果没有找到匹配的,则返回在 ELSE 子句里的 result (或者 NULL)。 这个类似于 C 里的 switch 语句。

上面的例子可以用简单 CASE 语法来写:

  1. SELECT a,
  2. CASE a WHEN 1 THEN 'one'
  3. WHEN 2 THEN 'two'
  4. ELSE 'other'
  5. END
  6. FROM test;
  7. a | case
  8. ---+-------
  9. 1 | one
  10. 2 | two
  11. 3 | other

CASE 表达式并不计算任何对于判断结果并不需要的子表达式。 比如,下面是一个可以避免被零除的方法:

SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END; 
例1:一道SQL语句面试题 
表内容: 
2005-05-09 胜 
2005-05-09 胜 
2005-05-09 负 
2005-05-09 负 
2005-05-10 胜 
2005-05-10 负 
2005-05-10 负

如果要生成下列结果, 该如何写sql语句?

胜 负 
2005-05-09  2  2 
2005-05-10  1  2

  1. create table #tmp(rq varchar(10),shengfu nchar(1))
  2. insert into #tmp values('2005-05-09','胜')
  3. insert into #tmp values('2005-05-09','胜')
  4. insert into #tmp values('2005-05-09','负')
  5. insert into #tmp values('2005-05-09','负')
  6. insert into #tmp values('2005-05-10','胜')
  7. insert into #tmp values('2005-05-10','负')
  8. insert into #tmp values('2005-05-10','负')
  9. select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜',
  10. sum(case when shengfu='负' then 1 else 0 end)'负'
  11. from #tmp group by rq
  12. ----------------------------------------------------------

例3:有一张表,里面有3个字段:语文,数学,英语。其中有3条记录分别表示语文70分,数学80分,英语58分,请用一条sql语句查询出这三条记录并按以下条件显示出来(并写出您的思路): 
   大于或等于80表示优秀,大于或等于60表示及格,小于60分表示不及格。  
       显示格式:  
       语文              数学                英语  
       及格              优秀                不及格    
----------------------------------------------------------

  1. select
  2. (case when 语文>=80 then '优秀'
  3. when 语文>=60 then '及格'
  4. else '不及格' end) as 语文,
  5. (case when 数学>=80 then '优秀'
  6. when 数学>=60 then '及格'
  7. else '不及格' end) as 数学,
  8. (case when 英语>=80 then '优秀'
  9. when 英语>=60 then '及格'
  10. else '不及格' end) as 英语,
  11. from table

case when条件表达式相关推荐

  1. Oracle入门(十四E)之条件表达式case和deocde函数

    一.表达式 (1)条件表达式 共有两种条件表达式,即 CASE 表达式和DECODE 表达式.就 CASE 比较两个表达式而言,该表达式在逻辑上等效于之前学习的NULLIF 函数.如果两个表达式相等, ...

  2. Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例

    Oracle数据库:条件表达式case when then else end,decode函数,oracle单行函数练习示例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很 ...

  3. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)

    系列博客 1. 改善代码设计 -- 优化函数的构成(Composing Methods) 2. 改善代码设计 -- 优化物件之间的特性(Moving Features Between Objects) ...

  4. django 1.8 官方文档翻译:2-5-9 条件表达式

    条件表达式 New in Django 1.8. 条件表达式允许你在过滤器.注解.聚合和更新操作中使用 if ... elif ... else的逻辑.条件表达式为表中的每一行计算一系列的条件,并且返 ...

  5. 【C语言探索之旅】 第一部分第六课:条件表达式

    内容简介 1.课程大纲 2.第一部分第六课:条件表达式 3.第一部分第七课预告:循环语句 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  6. Oracle学习:条件表达式及分组函数

    一.条件表达式 (1)使用 case when select empno, ename, job, sal "涨前薪水",case jobwhen 'PRESIDENT' then ...

  7. java条件运算符类型转换_Java运算符,条件表达式,类型转换

    运算符 首页要知道计算机最基本的功能就是执行数学运算,那Java中有那些现实中的加,减,乘,除呢 算术运算符 假设A=10,B=5 + 加法 A+B=15 - 减法 A-B=5 乘法,不像现实中的x, ...

  8. DB2 CASE/IF 条件控制语句

    DB2 CASE/IF 条件控制语句 ╭──╮╭──╮╭──╮╭──╮ │╭─╯│╭╮││╭─╯│╭─╯ ││ │╰╯││╰─╮│╰─╮ ││ │╭╮│╰─╮││╭─╯ │╰─╮││││╭─╯││╰─ ...

  9. JavaScript实现:如何写出漂亮的条件表达式

    摘要:就让我们看看以下几种常见的条件表达场景,如何写的漂亮! 本文分享自华为云社区<如何写出漂亮的条件表达式 - JavaScript 实现篇>,原文作者:查尔斯. 条件表达式,是我们在c ...

最新文章

  1. Android笔记之ViewModel的使用示例
  2. SpringMVC 实例应用 -- 不同方式控制器实现与参数传递
  3. 04737 c++ 自学考试2019版 第六章课后练习 程序设计题 1
  4. Docker+Teamcity+Maven+SVN搭建持续集成环境
  5. 前端跨域问题及解决方案
  6. matplotlib创建图的基本方法
  7. 项目管理——N个模板
  8. python实现app自动签到器_python实现网页自动签到功能
  9. 如何快速更换ip地址?
  10. Paxos 实现日志复制同步(Basic Paxos)
  11. 百度编辑器上传图片地址+上域名,让上传图片保存全路径
  12. JavaScript 专题之惰性函数
  13. java中函数的调用,java中如何调用函数
  14. 《需求工程——软件建模与分析》阅读笔记3
  15. yarn 修改国内镜像
  16. 基于C#实现的在线聊天室的桌面系统软件
  17. 【C++】指针深度解析
  18. 解决部署Hexo后出现的The custom domain for your GitHub Pages site is pointed at an outdated IP address警告
  19. c语言中json格式化输出,JSON格式化输出
  20. ERNIE的掩码机制代码解析

热门文章

  1. linux 进程管理 ppt,Linux内核结构与进程管理.ppt
  2. idea使用dababase tools时导出db2建表语句,索引显示错误
  3. 安装netframewoMS SQL SERVER 2005安装手记
  4. AngularJS 表单数据验证及错误信息提示
  5. JSON在JS和JAVA的处理
  6. Android:日常学习笔记(8)———探究UI开发(2)
  7. ELK日志管理之——logstash部署
  8. C++中的类所占内存空间总结
  9. int (*p)[4] 与 int* p[4]
  10. android http get