CASE WHEN 用法

sql语句判断方法之一 
Case具有两种格式。简单Case函数和Case搜索函数。 
--简单Case函数 
CASE sex 
WHEN ‘1‘ THEN ‘男‘ 
WHEN ‘2‘ THEN ‘女‘ 
ELSE ‘其他‘ END 
--Case搜索函数 
CASE WHEN sex = ‘1‘ THEN ‘男‘ 
WHEN sex = ‘2‘ THEN ‘女‘ 
ELSE ‘其他‘ END

这两种方式,可以实现相同的功能。简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。 
还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

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

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。

首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:

SELECT =
            CASE
            WHEN THEN
            WHEN THEN
            ELSE
            END

在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:

USE pubs
            GO
            SELECT
            Title,
            ‘Price Range‘ =
            CASE
            WHEN price IS NULL THEN ‘Unpriced‘
            WHEN price < 10 THEN ‘Bargain‘
            WHEN price BETWEEN 10 and 20 THEN ‘Average‘
            ELSE ‘Gift to impress relatives‘
            END
            FROM titles
            ORDER BY price
            GO

这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:

SELECT ‘Number of Titles‘, Count(*)
            FROM titles
            GROUP BY
            CASE
            WHEN price IS NULL THEN ‘Unpriced‘
            WHEN price < 10 THEN ‘Bargain‘
            WHEN price BETWEEN 10 and 20 THEN ‘Average‘
            ELSE ‘Gift to impress relatives‘
            END
            GO

你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示:

USE pubs
            GO
            SELECT
            CASE
            WHEN price IS NULL THEN ‘Unpriced‘
            WHEN price < 10 THEN ‘Bargain‘
            WHEN price BETWEEN 10 and 20 THEN ‘Average‘
            ELSE ‘Gift to impress relatives‘
            END AS Range,
            Title
            FROM titles
            GROUP BY
            CASE
            WHEN price IS NULL THEN ‘Unpriced‘
            WHEN price < 10 THEN ‘Bargain‘
            WHEN price BETWEEN 10 and 20 THEN ‘Average‘
            ELSE ‘Gift to impress relatives‘
            END,
            Title
            ORDER BY
            CASE
            WHEN price IS NULL THEN ‘Unpriced‘
            WHEN price < 10 THEN ‘Bargain‘
            WHEN price BETWEEN 10 and 20 THEN ‘Average‘
            ELSE ‘Gift to impress relatives‘
            END,
            Title
            GO

注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。

除了选择自定义字段之外,在很多情况下 CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。

SELECT ROW_NUMBER() OVER ( PARTITION BY 1 ORDER BY a.CreateDate) AS row_n,

a.OrderId,u.Name as UserName,a.UserId,v.VerifyName,p.ProductName,d.DepName,o.Name as CreteUserName,

‘OptName‘ =

CASE

WHEN a.VerifyStatus = 1002 THEN ‘--‘

ELSE  o1.Name

END ,

a.Purpose,a.Term,a.ApplyAmount,a.MonthAmount,a.NetAmount,a.YearRate,a.ServerFee,u.IDCard,w.CompanyName,

replace(CONVERT(varchar, a.CreateDate, 111 ),‘/‘,‘-‘)as CreateDates,a.VerifyStatus,u.Phone

FROM  T_LoanProductOrder as a

inner join T_UserInfo as u on a.UserId=u.UserId

inner join T_VerfyStatus as v on a.VerifyStatus=v.VerifyId

inner join T_Product as p on a.ProductTypeId=p.ProductId

inner join T_OperaterInfo as o on o.OptId=a.CreateUserId

inner join T_OperaterInfo as o1 on o1.OptId = a.FirstVerifyOptId

inner join T_DepartmentInfo as d on o.DepId=d.DepId

inner join T_UserWorkInfo as w on u.UserId=w.UserId

where 1=1 and a.VerifyStatus = 1002 or a.VerifyStatus = 3023

时间: 2024-12-17 03:33:59

CASE WHEN 用法的相关文章

Oracle CASE WHEN 用法介绍

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' THEN '女' ELSE '其他' END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT gra

CASE函数用法:相当于switch..case:,能够实现等值判断,也可以做范围判断 相当于if...else

--CASE函数用法:--1.相当于switch..case:,能够实现等值判断--语法:--case 字段/表达式 --判断指定折字段或者表达式的值,它不能判断null值,因为null不是一个具体的值-- when 值 then '自定义值'-- when 值 then '自定义值'-- else '前面都不满足的情况'--end--特点:-- 1.会生成一个新列-- 2.then后面的值的类型需要一致select StudentNo,StudentName,case ClassId when

Mysql 中的CASE WHEN 用法

在SELECT语句查询中可以使用CASE WHEN对查询出来的结果,进行一个类似于if else的判断. 具体的用法 1. SELECT a.website_id, b.customer_name, a.website_enddate, c.member_name, d.websitetype_id,            CASE                 WHEN d.websitetype_id=1 THEN 400                WHEN d.websitetype

sql case when 用法

sql语言中有没有类似C语言中的switch case的语句?? 没有,用case   when   来代替就行了.            例如,下面的语句显示中文年月         select   getdate()   as   日期,case   month(getdate())     when   11   then   '十一'     when   12   then   '十二'     else   substring('一二三四五六七八九十',   month(getda

MySQL 存储过程CASE语句用法

MySQL提供了一个替代的条件语句CASE. MySQL CASE语句使代码更加可读和高效. CASE语句有两种形式:简单的搜索CASE语句.下面讲讲MySQL 存储过程CASE语句用法. 1,CASE语法结构 CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands END CASE; 2,CASE应用实例 DELIMITER

MySQL case when 用法 详细举例,可创建数据演示

首先我们创建数据库表: CREATE TABLE `t_demo` ( `id` int(32) NOT NULL, `name` varchar(255) DEFAULT NULL, `age` int(2) DEFAULT NULL, `num` int(3) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 插入数据: INSERT INTO `t_demo` VALUES ('1', '张三',

(转)CASE WHEN 用法

Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END     种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式.还有一个需要注

你真的会玩SQL吗?Case的用法(转)

今天来总结整理一下Case,因为SQL查询中用得最多的逻辑判断. Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 这两种方式,可以实现相同的功能.简单Case函数的写法相对比较简洁,但是和Ca

SQL中的CASE的用法

CASE在SQL语句中,很有点类似java等高级编程语言中的switch这样子的多分枝语句,但是有点不同的是,case后面接的是when,另外,when的后续分枝有点类似if后面接else.这个是我的个人认识,case ..when..then..[else].. 下面,看看MySQL的帮助信息,可以看到case的基本语法结构: 1 topics: #CASE的两种基本用法 2 CASE OPERATOR 3 CASE STATEMENT 4 5 MariaDB [mysql]> help ca