`

case when条件表达式

阅读更多

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。

例子: 

SELECT * FROM test; 
a 
--- 
1 
2 
3 
SELECT a, 
CASE WHEN a=1 THEN 'one' 
WHEN a=2 THEN 'two' 
ELSE 'other' 
END 
FROM test; 
a | case 
---+------- 
1 | one 
2 | two 
3 | other 

 

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

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

CASE expression 
WHEN value THEN result 
[WHEN ...] 
[ELSE result] 
END 

 

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

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

SELECT a, 
CASE a WHEN 1 THEN 'one' 
WHEN 2 THEN 'two' 
ELSE 'other' 
END 
FROM test; 
a | case 
---+------- 
1 | one 
2 | two 
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
----------------------------------------------------------

create table #tmp(rq varchar(10),shengfu nchar(1)) 

insert into #tmp values('2005-05-09','胜') 
insert into #tmp values('2005-05-09','胜') 
insert into #tmp values('2005-05-09','负') 
insert into #tmp values('2005-05-09','负') 
insert into #tmp values('2005-05-10','胜') 
insert into #tmp values('2005-05-10','负') 
insert into #tmp values('2005-05-10','负') 
select rq, sum(case when shengfu='胜' then 1 else 0 end)'胜', 
           sum(case when shengfu='负' then 1 else 0 end)'负' 
           from #tmp group by rq 
---------------------------------------------------------- 

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

select 
    (case when 语文>=80 then '优秀' 
          when 语文>=60 then '及格' 
          else '不及格' end) as 语文, 
    (case when 数学>=80 then '优秀' 
          when 数学>=60 then '及格' 
          else '不及格' end) as 数学, 
    (case when 英语>=80 then '优秀' 
          when 英语>=60 then '及格' 
          else '不及格' end) as 英语, 
from table 

 

分享到:
评论

相关推荐

    oracle case when 语句的用法详解

    1. CASE WHEN 表达式有两种形式 代码如下:–简单Case函数 CASE sex WHEN ‘1’ THEN ‘男’ WHEN ‘2’ THEN ‘女’ ELSE ‘其他’ END –Case搜索函数 CASEWHEN sex = ‘1’ THEN ‘男’ WHEN sex = ‘2’ ...

    case when then语句用法

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

    Oracle_case_when_用法

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

    MySQL 的CASE WHEN 语句使用说明

    case when语句,用于计算条件列表并返回多个可能结果表达式之一。 CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。 CASE 搜索函数计算一组布尔表达式以确定结果。 两种格式都...

    CASE表达式实现基于条件逻辑来返回一个值

    我们在开发过程中,经常需要针对一列,基于条件逻辑来返回一个值,那么,这时候就需要使用到CASE表达式了。 例如,以下对Products表的查询就在SELECT语句中使用了CASE表达式,以生成用于描述categoryid列取值的信息...

    Ruby中case表达式详解

    第二种形式,在case语句的顶部指定一个目标,而每个when从句列出一个或者多个比较条件 和if一样,case返回执行的最后一个表达式的值;而且如果表达式和条件在同一行上的话,可以用then关键字来加以区分。 您可能...

    mysql存储过程之case语句用法实例详解

    除了if语句,mysql提供了一个替代的条件语句CASE。 mysql的 CASE语句使代码更加可读和高效。废话不多说,我们先来看下简单case语句的语法: CASE case_expression WHEN when_expression_1 THEN commands WHEN ...

    关于case when语句的报错问题详解

    SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句,下面这篇文章主要给大家介绍了关于case when语句的报错问题的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

    MySQL数据库:流程控制语句case.pptx

    case_value是要被判断的值或表达式,接下来是一系列的WHEN-THEN块,每一块的when_value参数指定要与case_value比较的值,如果为真,就执行statement_list中的SQL语句。如果前面的每一个块都不匹配就会执行ELSE块指定...

    EL表达式 (详解)

    EL表达式 (详解) EL表达式 ... 4) 条件标签&gt; 1.算术运算符有五个:+、-、*或$、/或div、%或mod 2.关系运算符有六个:==或eq、!=或ne、&lt;或lt、&gt;或gt、或le、&gt;=或ge 3.逻辑运算符有三个:&&或and、||或or、!或not ...

    SQL Server高级内容之case语法函数概述及使用

    (2)语法: case [字段] when 表达式 then 显示数据 when 表达式 then 显示数据 else 显示数据 end (3)百分制转换素质教育 1)如图:我们要将显示的数据转换成ABCDE,规则是90分以上显示A,80分以上显示B,以此类推。...

    mysqlCASEWHEN的基础和多种用法.pdf

    MySQL 中的 CASE 和 WHEN 语句用于根据条件执行不同的操作 CASE 语句是一种条件语句,用于根据某个条件返回不同的结果。在 MySQL 中,CASE 语句有两种格式:简单 CASE 函数和搜索 CASE 函数。 简单 CASE 函数 ...

    Oracle Sql 性能优化

    4、CASE 表达式WHEN…… CASE 表达式 WHEN THEN…比 CASE WHEN 表达式 THEN… 效率要高(没有验证过) 5、删除重复记录: 最高效的删除重复记录方法 ( 因为使用了ROWID)例子: DELETE FROM EMP E WHERE E.ROWID &gt; ...

    oracle认证考试相关资料pdf

    1.case 表达式 when 值 then 2.case when 表达式 3.SELECT job,sal, CASE WHEN sal WHEN sal&lt;2000 AND sal&gt;=1000 THEN sal*0.1 WHEN sal&lt;3000 AND sal&gt;=2000 THEN sal*0.15 WHEN sal&gt;=3000 THEN sal*0.2 ...

    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 ),...

    when-switch:开关柜JavaScript功能实现

    switch / caseJavaScript功能实现,受Ruby case / when启发。 用法 您可以使用单个表达式以功能方式转换切换用例: 严格平等 import when from 'when-switch' const getDrinkPrice = drink =&gt; when ( drink ) . ...

    INFORMIX与ORACLE存储过程语言之间的异同分析.pdf

    CASE语句 CASE 变量 WHEN 表达式1 THEN 语句块1 [WHEN 表达式2 THEN 语句块2 [...]] [ELSE 语句块1] END CASE; INFORMIX和ORACLE存储过程语言之间存在着一定的异同,了解这些异同是非常重要的,以便更好地使用存储...

    SQL学习笔记.docx

    CASE WHEN 函数是一个条件语句,用于根据条件执行不同的操作。CASE WHEN 函数的语法为 CASE WHEN condition THEN result [ WHEN condition THEN result ... ] ELSE result END,其中 condition 是条件,result 是...

    浅谈Mysql中类似于nvl()函数的ifnull()函数.pdf

    CASE函数有两种形式,一种是CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END,另一种是CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...

    实验四 SQL进行复杂查询(学生) (2).doc

    SELECT ..., CASE WHEN Ssex = '男' THEN '男生' WHEN Ssex = '女' THEN '女生' ELSE '条件不明' END ..., ... FROM student; 知识点:通过使用 CASE 表达式,我们可以实现按照指定顺序列出学生信息。 16. 显示...

Global site tag (gtag.js) - Google Analytics