SQL中CASE的用法

转载自”SQL中CASE的用法”来源:SQL帮助文档CASE计算条件列表并返回多个可能结果表达式之一。

CASE 具有两种格式:简单CASE 函数将某个表达式与一组简单表达式进行比较以确定结果。

CASE 搜索函数计算一组布尔表达式以确定结果。

两种格式都支持可选的ELSE 参数。

语法简单CASE 函数:CASE input_expressionWHEN when_expression THEN result_expression[ ...n ][ELSE else_result_expressionENDCASE 搜索函数:CASEWHEN Boolean_expression THEN result_expression[ ...n ][ELSE else_result_expressionEND参数input_expression是使用简单CASE 格式时所计算的表达式。

Input_expression 是任何有效的M icrosoft® SQL Server™ 表达式。

WHEN when_expression使用简单CASE 格式时input_expression 所比较的简单表达式。

When_expr ession 是任意有效的SQL Server 表达式。

Input_expression 和每个when _expression 的数据类型必须相同,或者是隐性转换。

n占位符,表明可以使用多个WHEN when_expression THEN result_expressi on 子句或WHEN Boolean_expression THEN result_expression 子句。

THEN result_expression当input_expression = when_expression 取值为TRUE,或者Boolean_e xpression 取值为TRUE 时返回的表达式。

result expression 是任意有效的SQL Server 表达式。

ELSE else_result_expression当比较运算取值不为TRUE 时返回的表达式。

如果省略此参数并且比较运算取值不为TRUE,CASE 将返回NULL 值。

Else_result_expression 是任意有效的SQL Server 表达式。

Else_result_expression 和所有result_expression 的数据类型必须相同,或者必须是隐性转换。

WHEN Boolean_expression使用CASE 搜索格式时所计算的布尔表达式。

Boolean_expression 是任意有效的布尔表达式。

结果类型从result_expressions 和可选else_result_expression 的类型集合中返回最高的优先规则类型。

有关更多信息,请参见数据类型的优先顺序。

结果值简单CASE 函数:计算input_expression,然后按指定顺序对每个WHEN 子句的input_expres sion = when_expression 进行计算。

返回第一个取值为TRUE 的(input_expression = when_expression) 的r esult_expression。

如果没有取值为TRUE 的input_expression = when_expression,则当指定ELSE 子句时SQL Server 将返回else_result_expression;若没有指定EL SE 子句,则返回NULL 值。

CASE 搜索函数:按指定顺序为每个WHEN 子句的Boolean_expression 求值。

返回第一个取值为TRUE 的Boolean_expression 的result_expression。

如果没有取值为TRUE 的Boolean_expression,则当指定ELSE 子句时SQL Server 将返回else_result_expression;若没有指定ELSE 子句,则返回N ULL 值。

示例A. 使用带有简单CASE 函数的SELECT 语句在SELECT 语句中,简单CASE 函数仅检查是否相等,而不进行其它比较。

下面的示例使用CASE 函数更改图书分类显示,以使其更易于理解。

USE pubsGOSELECT Category =CASE typeWHEN 'popular_comp' THEN 'Popular Computing'WHEN 'mod_cook' THEN 'Modern Cooking'WHEN 'business' THEN 'Business'WHEN 'psychology' THEN 'Psychology'WHEN 'trad_cook' THEN 'Traditional Cooking'ELSE 'Not yet categorized'END,CAST(title AS varchar(25)) AS 'Shortened Title',price AS PriceFROM titlesWHERE price IS NOT NULLORDER BY type, priceCOMPUTE AVG(price) BY typeGO下面是结果集:Category Shortened Title Price------------------- ------------------------- -------------------------- Business You Can Combat Computer S 2.99 Business Cooking with Computers: S 11.95 Business The Busy Executive's Data 19.99 Business Straight Talk About Compu 19.99avg========================13.73Category Shortened Title Price------------------- ------------------------- -------------------------- Modern Cooking The Gourmet Microwave 2.99 Modern Cooking Silicon Valley Gastronomi 19.99avg======================== ==11.49Category Shortened Title Price------------------- ------------------------- -------------------------- Popular Computing Secrets of Silicon Valley 20.00 Popular Computing But Is It User Friendly? 22.95avg======================== ==21.48Category Shortened Title Price------------------- ------------------------- -------------------------- Psychology Life Without Fear 7.00 Psychology Emotional Security: A New 7.99 Psychology Is Anger the Enemy? 10.95 Psychology Prolonged Data Deprivatio 19.99 Psychology Computer Phobic AND Non-P 21.59avg======================== ==13.50Category Shortened Title Price------------------- ------------------------- -------------------------- Traditional Cooking Fifty Years in Buckingham 11.95 Traditional Cooking Sushi, Anyone? 14.99 Traditional Cooking Onions, Leeks, and Garlic 20.95avg========================15.96(21 row(s) affected)B. 使用带有简单CASE 函数和CASE 搜索函数的SELECT 语句在SELECT 语句中,CASE 搜索函数允许根据比较值在结果集内对值进行替换。

下面的示例根据图书的价格范围将价格(money 列)显示为文本注释。

USE pubsGOSELECT 'Price Category' =CASEWHEN price IS NULL THEN 'Not yet priced'WHEN price < 10 THEN 'Very Reasonable Title'WHEN price >= 10 and price < 20 THEN 'Coffee Table Title'ELSE 'Expensive book!'END,CAST(title AS varchar(20)) AS 'Shortened Title'FROM titlesORDER BY priceGO下面是结果集:Price Category Shortened Title--------------------- --------------------Not yet priced Net EtiquetteNot yet priced The Psychology of CoVery Reasonable Title The Gourmet MicrowavVery Reasonable Title You Can Combat CompuVery Reasonable Title Life Without FearVery Reasonable Title Emotional Security:Coffee Table Title Is Anger the Enemy?Coffee Table Title Cooking with ComputeCoffee Table Title Fifty Years in BuckiCoffee Table Title Sushi, Anyone?Coffee Table Title Prolonged Data DepriCoffee Table Title Silicon Valley GastrCoffee Table Title Straight Talk AboutCoffee Table Title The Busy Executive'sExpensive book! Secrets of Silicon VExpensive book! Onions, Leeks, and GExpensive book! Computer Phobic AndExpensive book! But Is It User Frien(18 row(s) affected)C. 使用带有SUBSTRING 和SELECT 的CASE 函数下面的示例使用CASE 和THEN 生成一个有关作者、图书标识号和每个作者所著图书类型的列表。

合集下载

SQL之casewhenthen用法

SQL之casewhenthen用法

SQL之casewhenthen⽤法case具有两种格式。

简单case函数和case搜索函数。

--简单case函数case sexwhen'1'then'男'when'2'then'⼥’else '其他' end--case搜索函数case when sex = '1' then '男'when sex = '2' then '⼥'else '其他' end这两种⽅式,可以实现相同的功能。

简单case函数的写法相对⽐较简洁,但是和case搜索函数相⽐,功能⽅⾯会有些限制,⽐如写判定式。

还有⼀个需要注重的问题,case函数只返回第⼀个符合条件的值,剩下的case部分将会被⾃动忽略。

--⽐如说,下⾯这段sql,你永远⽆法得到“第⼆类”这个结果case when col_1 in ('a','b') then'第⼀类'when col_1 in ('a') then'第⼆类'else'其他'end下⾯实例演⽰:⾸先创建⼀张users表,其中包含id,name,sex三个字段,表内容如下:SQL>drop table users purge;drop table users purgeORA-00942: 表或视图不存在SQL>create table users(id int,name varchar2(20),sex number);Table createdSQL>insert into users(id,name) values(1,'张⼀');1 row insertedSQL>insert into users(id,name,sex) values(2,'张⼆',1);1 row insertedSQL>insert into users(id,name) values(3,'张三');1 row insertedSQL>insert into users(id,name) values(4,'张四');1 row insertedSQL>insert into users(id,name,sex) values(5,'张五',2);1 row insertedSQL>insert into users(id,name,sex) values(6,'张六',1);1 row insertedSQL>insert into users(id,name,sex) values(7,'张七',2);1 row insertedSQL>insert into users(id,name,sex) values(8,'张⼋',1);1 row insertedSQL>commit;Commit completeSQL>select*from users;ID NAME SEX--------------------------------------- -------------------- ----------1张⼀2张⼆13张三4张四5张五26张六17张七28张⼋18 rows selected1、上表结果中的"sex"是⽤代码表⽰的,希望将代码⽤中⽂表⽰。

sql中case的用法

sql中case的用法

sql中case的用法在SQL中,CASE语句是一种条件表达式,用于根据给定条件在查询结果中进行选择和操作。

CASE语句可以有多种形式,包括简单CASE表达式、CASE表达式和CASE语句。

1.简单CASE表达式:简单CASE表达式通过将一个表达式与一系列可能的值进行比较,来选择一个结果。

语法如下:CASE expressionWHEN value1 THEN result1WHEN value2 THEN result2...ELSE resultEND示例:SELECTcolumn1,column2,CASE column3WHEN 'value1' THEN 'result1'WHEN 'value2' THEN 'result2'ELSE 'result'ENDFROM table2.CASE表达式:CASE表达式通过根据一系列条件来选择结果。

每个条件都是一个独立的表达式,任何返回TRUE的条件都会执行对应的结果。

语法如下:CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE resultEND示例:SELECTcolumn1,column2,WHEN column3 = 'value1' THEN 'result1'WHEN column3 = 'value2' THEN 'result2'ELSE 'result'ENDFROM table3.CASE语句:CASE语句允许在查询中引入复杂的逻辑和条件判断,可以与其他SQL 语句进行组合使用。

语法如下:CASE WHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE resultEND示例:SELECTcolumn1,column2,WHEN column3 = 'value1' AND column4 > 100 THEN 'result1'WHEN column3 = 'value2' OR column4 <= 100 THEN 'result2'ELSE 'result'ENDFROM table除了上述基本用法,CASE语句还可以与聚合函数、子查询和其他SQL 语句进行结合使用,以实现更复杂的逻辑操作。

sql中case语句三条数据右边中文左边数字用法举例说明

sql中case语句三条数据右边中文左边数字用法举例说明

sql中case语句三条数据右边中文左边数字用法举例说明在SQL语句中,Case语句是一种常用的条件语句,可以根据不同的条件执行不同的操作。

其中,有一种特殊用法,即右边为中文,左边为数字的情况。

下面我们就来举例说明一下这种用法。

1. 给定分数范围,进行等级划分例如,我们有一张表格存储了学生的成绩,现在需要将成绩按照一定的分数区间进行等级划分。

具体要求如下:90分及以上为优秀,80-89分为良好,70-79分为中等,60-69分为及格,60分以下为不及格。

我们可以使用以下Case语句来实现:CASEWHEN score >= 90 THEN '优秀'WHEN score >= 80 AND score <= 89 THEN '良好'WHEN score >= 70 AND score <= 79 THEN '中等'WHEN score >= 60 AND score <= 69 THEN '及格'ELSE '不及格'END AS grade在这个例子中,我们可以看到,在Case语句中,我们使用了中文作为等级的表述,而将分数的区间用数字表示。

2. 根据性别显示不同的称呼另一个例子是,在一个存储了用户信息的表格中,我们需要根据用户的性别来显示不同的称呼。

比如,对于男性用户,我们需要显示“先生”,而对于女性用户,我们需要显示“女士”。

我们可以使用以下Case语句实现:CASEWHEN gender = '男' THEN '先生'WHEN gender = '女' THEN '女士'END AS title在这个例子中,我们同样使用了中文作为称呼的表述,而将性别使用了文字表示。

3. 根据状态显示不同的操作最后一个例子是,在一个订单管理系统中,我们需要根据订单的状态来显示不同的操作按钮。

SQL中Case的语法

SQL中Case的语法

SQL中Case的语法case两种格式:●简单Case函数CASE sexWHEN ‘1’THEN ‘男’WHEN ‘2’THEN ‘女’ELSE ‘其他’END●Case搜索函数CASE WHEN sex=’1’THEN ‘男’WHEN sex=’2’THEN ‘女’ELSE ‘其他’END注意:1)Case函数只返回第一个符合条件的值,剩下的Case部分将会自动忽略例如:CASE WHEN col_1 IN (‘a’,’b’) THEN ‘第一类’WHEN col_1 IN(‘a’) THEN ‘第二类’ELSE ‘其他’END2)case when:case(switch)里的那个when必须是数值型的Case函数用途:已知数据按照另外一种方式分组:根据这个国家人口数据,统计亚洲和北美洲的人口数量。

1)国家表结构(Table_A):2)表中数据:3)Sql代码(case1.sql):SELECT SUM(population),CASE countryWHEN1THEN'亚洲'WHEN9THEN'亚洲'WHEN6THEN'亚洲'WHEN2THEN'北美洲'WHEN3THEN'北美洲'WHEN8THEN'北美洲'ELSE'其他'ENDFROM Table_AGROUP BY CASE countryWHEN1THEN'亚洲'WHEN9THEN'亚洲'WHEN6THEN'亚洲'WHEN2THEN'北美洲'WHEN3THEN'北美洲'WHEN8THEN'北美洲'ELSE'其他'END;4)结果:根据工资来判断等级,并统计每一等级的人数。

1)工资表结构(Table_B):2)表中数据:3)Sql代码(case2.sql):selectcase when salary<=500then'1'when salary>500and salary<=600then'2'when salary>600and salary<=800then'3'when salary>800and salary<=1000then'4' else null end salay_class,count(*)from Table_Bgroup bycase when salary<=500then'1'when salary>500and salary<=600then'2'when salary>600and salary<=800then'3'when salary>800and salary<=1000then'4' else null end;4)结果:用一个SQL语句完成不同条件的分组:1)国家性别表结构(Table_C):2)表中数据:3)Sql代码(case3.sql):select country,SUM(case when sex='1'thenpopulation else0end),---男性人口SUM(case when sex='2'thenpopulation else0end)--女性人口from Table_Cgroup by country;4)结果:根据条件有选择的UPDATE:例如:以如下条件更新1.工资5000以上的职员,工资减少10%。

case 用法

case 用法
国家(country)人口(population)
中国600
美国100
加拿大100
英国200
法国300
日本250
德国200
墨西哥50
印度250
根据这个国家人口数据,统计亚洲和北美洲的人口数量。应该得到下面这个结果。
洲人口
亚洲1100
北美洲250
其他700
想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。
ELSE 1 END = 1 )
如果单纯使用Check,如下所示
CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )
女职员的条件倒是符合了,男职员就无法输入了。
四,根据条件有选择的UPDATE。
例,有如下更新条件
工资以上的职员,工资减少%
要实现下面这个功能,可以使用下面两条语句
--使用IN的时候
SELECT keyCol,
CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;
--使用EXISTS的时候
只选修一门课程的人,返回那门课程的ID
选修多门课程的人,返回所选的主课程ID
简单的想法就是,执行两条不同的SQL语句进行查询。
条件
--条件:只选择了一门课程的学生
SELECT std_id, MAX(class_id) AS main_class

SQL中Case的使用方法

SQL中Case的使用方法

SQL中Case的使用方法在 SQL 中,CASE 表达式可以用于在查询或更新语句中根据条件返回不同的值。

它类似于编程语言中的 switch 语句,可以根据不同的条件执行不同的操作。

CASE 表达式可以用于 SELECT、WHERE、ORDER BY 和其他子句中。

CASE表达式的一般语法如下:```CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE resultEND```其中,`condition1`、`condition2`等是逻辑表达式,可以是任何返回布尔值的表达式。

`result1`、`result2`等是条件为真时返回的结果。

以下是几种常见的CASE用法:1.简单的CASE表达式简单的CASE表达式根据一个列的值进行判断,并返回对应的结果。

例如:```SELECT name,CASE department_idWHEN 1 THEN 'Sales'WHEN 2 THEN 'Marketing'WHEN 3 THEN 'Finance'ELSE 'Other'END AS departmentFROM employees;```上述语句根据 `department_id` 列的值返回不同的 `department` 值。

如果 `department_id` 为 1,则返回 'Sales',如果为 2,则返回'Marketing',以此类推。

如果 `department_id` 不匹配任何条件,则返回 'Other'。

2.CASE表达式CASE表达式类似于简单的CASE表达式,但支持更复杂的条件判断。

每个条件可以是一个独立的逻辑表达式。

例如:```SELECT name,CASEWHEN age < 18 THEN 'Child'WHEN age >= 18 AND age < 65 THEN 'Adult'ELSE 'Senior'END AS age_groupFROM employees;```上述语句根据 `age` 列的值返回不同的 `age_group` 值。

Sql_Case_When用法用例

SQL中Case的使用方法Case具有两种格式。

简单Case函数和Case搜索函数。

--简单Case函数CASE sexWHEN'1'THEN'男'WHEN'2'THEN'女'ELSE'其他'END--Case搜索函数CASE WHEN sex ='1'THEN'男'WHEN sex ='2'THEN'女'ELSE'其他'END这两种方式,可以实现相同的功能。

简单Case函数的写法相对比较简洁,但是和Case搜索函数相比,功能方面会有些限制,比如写判断式。

还有一个需要注意的问题,Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。

--比如说,下面这段SQL,你永远无法得到“第二类”这个结果CASE WHEN col_1 IN('a','b')THEN'第一类'WHEN col_1 IN('a')THEN'第二类'ELSE'其他'END下面我们来看一下,使用Case函数都能做些什么事情。

一,已知数据按照另外一种方式进行分组,分析。

有如下数据:(为了看得更清楚,我并没有使用国家代码,而是直接用国家名作为Primary Key)国家(country)人口(population)中国600美国100加拿大100英国200法国300日本250德国200墨西哥50印度250根据这个国家人口数据,统计亚洲和北美洲的人口数量。

应该得到下面这个结果。

洲人口亚洲1100北美洲250其他700想要解决这个问题,你会怎么做?生成一个带有洲Code的View,是一个解决方法,但是这样很难动态的改变统计的方式。

如果使用Case函数,SQL代码如下:SELECT SUM(population),CASE countryWHEN'中国'THEN'亚洲'WHEN'印度'THEN'亚洲'WHEN'日本'THEN'亚洲'WHEN'美国'THEN'北美洲'WHEN'加拿大'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'ENDFROM Table_AGROUP BY CASE countryWHEN'中国'THEN'亚洲'WHEN'印度'THEN'亚洲'WHEN'日本'THEN'亚洲'WHEN'美国'THEN'北美洲'WHEN'加拿大'THEN'北美洲'WHEN'墨西哥'THEN'北美洲'ELSE'其他'END;同样的,我们也可以用这个方法来判断工资的等级,并统计每一等级的人数。

SQL之casewhenthen用法(用于分类统计)

SQL之casewhenthen⽤法(⽤于分类统计)case具有两种格式。

简单case函数和case搜索函数。

--简单case函数case sexwhen '1' then '男'when '2' then '⼥’else '其他' end--case搜索函数case when sex = '1' then '男'when sex = '2' then '⼥'else '其他' end这两种⽅式,可以实现相同的功能。

简单case函数的写法相对⽐较简洁,但是和case搜索函数相⽐,功能⽅⾯会有些限制,⽐如写判定式。

还有⼀个需要注重的问题,case函数只返回第⼀个符合条件的值,剩下的case部分将会被⾃动忽略。

--⽐如说,下⾯这段sql,你永远⽆法得到“第⼆类”这个结果case when col_1 in ('a','b') then '第⼀类'when col_1 in ('a') then '第⼆类'else '其他' end下⾯实例演⽰:⾸先创建⼀张users表,其中包含id,name,sex三个字段,表内容如下:SQL> drop table users purge;drop table users purgeORA-00942: 表或视图不存在SQL> create table users(id int,name varchar2(20),sex number);Table createdSQL> insert into users(id,name) values(1,'张⼀');1 row insertedSQL> insert into users(id,name,sex) values(2,'张⼆',1);1 row insertedSQL> insert into users(id,name) values(3,'张三');1 row insertedSQL> insert into users(id,name) values(4,'张四');1 row insertedSQL> insert into users(id,name,sex) values(5,'张五',2);1 row insertedSQL> insert into users(id,name,sex) values(6,'张六',1);1 row insertedSQL> insert into users(id,name,sex) values(7,'张七',2);1 row insertedSQL> insert into users(id,name,sex) values(8,'张⼋',1);1 row insertedSQL> commit;Commit completeSQL> select * from users;ID NAME SEX--------------------------------------- -------------------- ----------1张⼀2 张⼆ 13张三4张四5 张五 26 张六 17 张七 28 张⼋ 18 rows selected1、上表结果中的"sex"是⽤代码表⽰的,希望将代码⽤中⽂表⽰。

sqlservercase用法

SQL Server CASE 语句的用法1. CASE 语句是 SQL Server 中一个非常强大的功能,它可以在查询中根据条件进行选择性的返回值。

有时候我们在查询数据时,需要根据不同的条件返回不同的结果,这时候就可以使用 CASE 语句来实现。

2. 语法CASE 语句的基本语法如下:```SELECTCASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE resultENDFROM table_name;```3. 示例举个简单的例子,假设我们有一个学生成绩表,我们需要根据学生成绩的不同返回不同的评价,可以使用如下查询语句:```SELECTCASEWHEN score >= 90 THEN '优秀'WHEN score >= 80 THEN '良好'WHEN score >= 60 THEN '及格'ELSE '不及格'END AS evaluationFROM student_score;```4. 这段查询语句会根据不同的分数返回不同的评价,大于等于90分为优秀,大于等于80分为良好,大于等于60分为及格,其他情况为不及格。

5. 多重条件CASE 语句也支持多重条件的判断,可以根据需要添加多个 WHEN 语句来判断不同的条件。

例如:```SELECTCASEWHEN age < 18 THEN '未成年'WHEN age >= 18 AND age < 65 THEN '成年人'ELSE '老年人'END AS age_groupFROM person_info;```6. CASE 语句还可以用于对字段进行逻辑运算,比如我们需要根据不同字段的值计算新的字段,可以使用 CASE 语句来完成这一操作。

SQL中的CASE的用法

SQL中的CASE的⽤法CASE在SQL语句中,很有点类似java等⾼级编程语⾔中的switch这样⼦的多分枝语句,但是有点不同的是,case后⾯接的是when,另外,when的后续分枝有点类似if后⾯接else。

这个是我的个⼈认识,case 。

when。

then。

[else]。

下⾯,看看MySQL的帮助信息,可以看到case的基本语法结构:1 topics: #CASE的两种基本⽤法2 CASE OPERATOR3 CASE STATEMENT45 MariaDB [mysql]> help case statement; #case的第⼀种⽤法6 Name: 'CASE STATEMENT'7 Description:8 Syntax:9 CASE case_value10 WHEN when_value THEN statement_list11 [WHEN when_value THEN statement_list] ...12 [ELSE statement_list]13 END CASE1415 Or:1617 CASE18 WHEN search_condition THEN statement_list19 [WHEN search_condition THEN statement_list] ...20 [ELSE statement_list]21 END CASE2223 MariaDB [mysql]> help case operator; #case的第⼆种基本⽤法24 Name: 'CASE OPERATOR'25 Description:26 Syntax:27 CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN28 result ...] [ELSE result] END2930 CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]31 [ELSE result] END这⾥,我还需要说明的是,case可以和select,check,update等⼀起配合使⽤,相当于增加了SQL操作的条件分析,是的SQL写的可以更加强⼤。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档