简单CASE WHEN函数:

CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' END
CASE SCORE WHEN 'B' THEN '良' ELSE '不及格' END
CASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END

等同于,使用CASE WHEN条件表达式函数实现:

CASE WHEN SCORE = 'A' THEN '优'
     WHEN SCORE = 'B' THEN '良'
     WHEN SCORE = 'C' THEN '中' ELSE '不及格' END

THEN后边的值与ELSE后边的值类型应一致,否则会报错 。如下:

CASE SCORE WHEN 'A' THEN '优' ELSE 0 END

'优'和0数据类型不一致则 报错

[Err] ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 NUMBER

简单CASE WHEN函数只能应对一些简单的业务场景,而CASE WHEN条件表达式的写法则更加灵活。

CASE WHEN条件表达式函数:类似JAVA中的IF ELSE语句。

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

condition是一个返回布尔类型的表达式,如果表达式返回true,则整个函数返回相应result的值,如果表达式皆为false,则返回ElSE后result的值,如果省略了ELSE子句,则返回NULL

下面介绍几种常用场景。

场景1:有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀

SELECT
    STUDENT_NAME,
    (CASE WHEN score < 60 THEN '不及格'
        WHEN score >= 60 AND score < 80 THEN '及格'
        WHEN score >= 80 THEN '优秀'
        ELSE '异常' END) AS REMARK
    TABLE

 注意:如果你想判断score是否null的情况,WHEN score = null THEN '缺席考试',这是一种错误的写法,正确的写法应为:

CASE WHEN score IS NULL THEN '缺席考试' ELSE '正常' END

场景2:现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。

表结构如下:其中STU_SEX字段,0表示男生,1表示女生。

STU_CODESTU_NAMESTU_SEXSTU_SCORE
XM小明088
XL小磊055
XF小峰045
XH小红166
XN晓妮177
XY小伊199
SELECT 
	SUM (CASE WHEN STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_COUNT,
	SUM (CASE WHEN STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_COUNT,
	SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 0 THEN 1 ELSE 0 END) AS MALE_PASS,
	SUM (CASE WHEN STU_SCORE >= 60 AND STU_SEX = 1 THEN 1 ELSE 0 END) AS FEMALE_PASS
	THTF_STUDENTS

输出结果如下:

MALE_COUNTFEMALE_COUNTMALE_PASSFEMALE_PASS
3313

场景3:经典行转列,并配合聚合函数做统计

现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果

有能耗表如下:其中,E_TYPE表示能耗类型,0表示水耗,1表示电耗,2表示热耗

E_CODEE_VALUE E_TYPE
北京28.500
北京23.511
北京28.122
北京12.300
北京15.461
上海18.880
上海16.661
上海19.990
上海10.050
SELECT 
	E_CODE,
	SUM(CASE WHEN E_TYPE = 0 THEN E_VALUE ELSE 0 END) AS WATER_ENERGY,--水耗
	SUM(CASE WHEN E_TYPE = 1 THEN E_VALUE ELSE 0 END) AS ELE_ENERGY,--电耗
	SUM(CASE WHEN E_TYPE = 2 THEN E_VALUE ELSE 0 END) AS HEAT_ENERGY--热耗
	THTF_ENERGY_TEST
GROUP BY
	E_CODE

 输出结果如下:

E_CODEWATER_ENERGYELE_ENERGYHEAT_ENERGY
北京40.8038.9728.12
上海48.9216.660

场景4:CASE WHEN中使用子查询

根据城市用电量多少,计算用电成本。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。

 价格表如下:

P_PRICEP_LEVELP_LIMIT
1.20010
1.70130
2.50250

当能耗值小于10时,使用P_LEVEL=0时的P_PRICE的值,能耗值大于10小于30使用P_LEVEL=1时的P_PRICE的值...

CASE WHEN energy <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 0) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 0)
    WHEN energy > (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 0) AND energy <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 1) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 1)
    WHEN energy > (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 1) AND energy <= (SELECT P_LIMIT FROM TABLE_PRICE WHERE P_LEVEL = 2) THEN (SELECT P_PRICE FROM TABLE_PRICE WHERE P_LEVEL = 2)

 场景5:结合max聚合函数

CASE WHEN 函数使用起来简单易懂,此篇文章只作了简单的使用介绍,还需在实际工作中根据业务场景不同来灵活使用。

🎉   如果这篇文章对你有帮助,点赞👍  收藏⭐ 关注✅ 哦,创作不易,感谢!😀

简单CASE WHEN函数:CASE SCORE WHEN 'A' THEN '优' ELSE '不及格' ENDCASE SCORE WHEN 'B' THEN '良' ELSE '不及格' ENDCASE SCORE WHEN 'C' THEN '中' ELSE '不及格' END等同于,使用CASE WHEN条件表达式函数实现:CASE WHEN SCORE = 'A'.........
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   grade, COUNT (CASE WHEN sex = 1 THEN 1      /*sex 1为男生,2位
文章目录SQLCASE WHEN用法详解场景1:有分数score,score=60返回及格,score>=80返回优秀场景2:现老师要统计班中,有多少男同学,多少女同学,并统计男同学中有几人及格,女同学中有几人及格,要求用一个SQL输出结果。场景3:经典行转列,并配合聚合函数做统计,现要求统计各个城市,总共使用了多少水耗、电耗、热耗,使用一条SQL语句输出结果场景4:CASE WHEN中使用子查询,根据城市用电量多少,计算用电成本。假设电能耗单价分为三档,根据不同的能耗值,使用相应价格计算成本。场景5:结合max聚合函数一道真实的面试题 SQLCASE WHEN用法详解 简单CASE WH
简单CASE WHEN函数: CASE SCORE WHEN ‘A’ THEN ‘优’ ELSE ‘不及格’ END CASE SCORE WHEN ‘B’ THEN ‘良’ ELSE ‘不及格’ END CASE SCORE WHEN ‘C’ THEN ‘中’ ELSE ‘不及格’ END  等同于,使用CASE WHEN条件表达式函数实现: CASE WHEN SCORE = ‘A’...
当需要从数据源上直接判断数据显示带不动含义的时候,就可以在SQL语句中使用case when 函数。 语法如下: Case具有两种格式。简单Case函数和Case搜索函数。 简单Case函数格式: CASE 列名 WHEN 条件值1 THEN 选项1 WHEN 条件值2 THEN 选项2 ELSE 默认值 (注释:列名,这里是sex,如果放在case后,则显示在屏幕上的列名即为列名sex) Case搜索函数: WHEN 条件1 THEN 选项1 WHEN 条件2 THE --   搜索Case函数: Case函数(Case搜索函数): 判断表达式的真假,如果为真,返回结果;如果为假,返回else值;如果未定义else值,则返回空值(使用条件确定返回值); select name,id,(case wh...
行列互转,是一个经常遇到的需求。实现的方法,有case when方式和2005之后的内置pivot和unpivot方法来实现。 在读了技术内幕那一节后,虽说这些解决方案早就用过了,却没有系统性的认识和总结过。为了加深认识,再总结一次。 行列互转,可以分为静态互转,即事先就知道要处理多少行(列);动态互转,事先不知道处理多少行(列)。 --创建测试环境 USE tempdb; IF OBJECT_ID('dbo.Orders') IS NOT NULL DROP TABLE dbo.Orders; CREATE TABLE dbo.Orders orderid int
case when 是mySQL里面的控制流语句,和if…then…的分支判断逻辑很相似。case when语句有两种: (1)简单case when (2)case搜索函数法 简单case when只能处理等式问题,case搜索函数法可以处理等式问题也可以处理不等式问题。case when的语法逻辑 二、case when语句在业务中常见的几种用法 2.1 数据映射处理 比如将分类变量中每一个取值分别映射成0、1、2…5;所有用户的性别映射成0、1;或者把数值映射成具体的实际含义。 如果是映射性别(0为女
其中,condition1、condition2等是条件表达式,result1、result2等是与其对应的结果表达式。如果没有任何条件表达式为TRUE,那么将返回默认的default_result。 例如,以下示例演示了如何使用CASE WHEN语句: SELECT ProductID, UnitPrice, WHEN UnitPrice < 10 THEN 'Low' WHEN UnitPrice >= 10 AND UnitPrice <= 50 THEN 'Medium' ELSE 'High' END AS PriceCategory FROM Products 在这个例子中,如果产品的价格小于10,则它将被分类为“低价”;如果价格在10到50之间,则它将被分类为“中价”;如果价格大于50,则它将被分类为“高价”。最终的结果将包含ProductID、UnitPrice和PriceCategory三个列。 ### 回答2: SQL Server中的CASE WHEN语句是一种条件表达式,它能够按照指定条件返回不同的结果。在查询和表达式中经常用到,很容易理解和使用。CASE WHEN语句有两种形式:简单CASE表达式和搜索CASE表达式。 1. 简单CASE表达式 简单CASE表达式需要指定一个表达式和一系列比较值,并且每个比较值都与特定的结果关联。在执行时,将会根据表达式的值evaluated所有的比较值,最终返回匹配成功的结果。简单CASE表达式的语法如下: CASE expression WHEN value1 THEN result1 WHEN value2 THEN result2 WHEN valueN THEN resultN ELSE default_result 其中expression代表要进行比较的表达式,value1至valueN依次代表每个比较值,result1至resultN依次代表每个比较值匹配成功时的返回结果,default_result代表当所有比较值都不匹配时的默认返回结果。 例如,假设有一张学生成绩表,包含了学生姓名和数学成绩两列,现在需要根据数学成绩的分数范围,将成绩划分为及格、中等和优秀三个等级,并查询每个等级的学生数量,可以使用以下语句: SELECT WHEN MathScore >= 90 THEN '优秀' WHEN MathScore >= 70 THEN '中等' ELSE '及格' END AS Grade, COUNT(*) AS Count FROM Scores GROUP BY WHEN MathScore >= 90 THEN '优秀' WHEN MathScore >= 70 THEN '中等' ELSE '及格' 2. 搜索CASE表达式 搜索CASE表达式不像简单CASE表达式需要预先定义一系列的比较值。相反,搜索CASE表达式中使用了一系列的Boolean表达式,根据Boolean表达式的结果返回匹配成功的值。当有多个表达式返回TRUE时,返回第一个TRUE的结果。搜索CASE表达式的语法如下: WHEN boolean_expression1 THEN result1 WHEN boolean_expression2 THEN result2 WHEN boolean_expressionN THEN resultN ELSE default_result 例如,假设现在需要查询所有成绩表中所有姓名以A开头的学生的信息,而成绩表中没有提供以姓名为条件的WHERE子句,可以使用以下语句: SELECT * FROM Scores WHERE WHEN Name LIKE 'A%' THEN 1 ELSE 0 END = 1 其中,CASE语句中的表达式使用了LIKE运算符进行模糊匹配,当学生姓名以A开头时,该表达式返回1,否则返回0。后面的WHERE子句通过比较CASE表达式的结果是否等于1,可以筛选出所有姓名以A开头的学生的信息。 总之,SQL Server中的CASE WHEN语句是一种非常实用的语句,可以根据查询需要灵活地使用简单CASE表达式和搜索CASE表达式,让查询更加灵活和高效。 ### 回答3: SQL Server CASE WHEN 语句是一个条件表达式,用来实现多条件判断,并根据不同条件返回不同的结果。它可以用于SELECT、UPDATE和DELETE等SQL语句中,主要用于根据不同条件生成不同的结果。 CASE WHEN 语法格式: SELECT WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE defualt_result FROM table_name; 其中,condition是待判断的条件,result是符合条件时返回的结果,ELSE后面的default_result是条件都不满足时返回的结果。 CASE WHEN 用法的具体解释: 1.简单 CASE WHEN 当只有一个条件需要判断时,可以使用简单CASE WHEN语法,如: SELECT CASE Country WHEN 'China' THEN 'CN' WHEN 'United States' THEN 'US' ELSE 'Unknown' END AS CountryCode FROM Customers; 2.搜索条件 CASE WHEN 当需要多条件判断时,可以使用搜索条件CASE WHEN语法,如: SELECT OrderID, WHEN OrderID < 1000 THEN 'Low' WHEN OrderID >= 1000 AND OrderID < 2000 THEN 'Medium' WHEN OrderID >= 2000 AND OrderID < 3000 THEN 'High' ELSE 'Unknown' END AS OrderPriority FROM Orders; 3. NULL值处理 当需要处理 NULL 值时,可以使用 IS NULL 或 IS NOT NULL 进行判断,如: SELECT ProductName, WHEN UnitsInStock IS NULL THEN 'Out of Stock' WHEN UnitsInStock < 10 THEN 'Low Stock' WHEN UnitsInStock >= 10 AND UnitsInStock <= 20 THEN 'Medium Stock' ELSE 'In Stock' END AS StockStatus FROM Products; 总之,CASE WHEN 语句可以帮助我们根据不同条件返回不同的结果,非常灵活且实用,是 SQL Server 中不可缺少的一部分。