简单CASE WHEN函数:

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

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

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

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

格式:

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

下面介绍几种常用场景。

场景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 REMARKFROM    TABLE
CASE WHEN score IS NULL THEN '缺席考试' ELSE '正常' END

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

STU_CODE STU_NAME STU_SEX STU_SCORE
XM 小明 0 88
XL 小磊 0 55
XF 小峰 0 45
XH 小红 1 66
XN 晓妮 1 77
XY 小伊 1 99
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_PASSFROM THTF_STUDENTS
MALE_COUNT FEMALE_COUNT MALE_PASS FEMALE_PASS
3 3 1 3

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

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

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

E_CODE E_VALUE E_TYPE
北京 28.50 0
北京 23.51 1
北京 28.12 2
北京 12.30 0
北京 15.46 1
上海 18.88 0
上海 16.66 1
上海 19.99 0
上海 10.05 0
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--热耗FROM THTF_ENERGY_TESTGROUP BYE_CODE
E_CODE WATER_ENERGY ELE_ENERGY HEAT_ENERGY
北京 40.80 38.97 28.12
上海 48.92 16.66 0

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

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

价格表如下:

P_PRICE P_LEVEL P_LIMIT
1.20 0 10
1.70 1 30
2.50 2 50

当能耗值小于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)

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

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注的更多内容!

更多相关文章

  1. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
  2. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
  3. Android事件分发机制完全解析,带你从源码的角度彻底理解(下) .
  4. Android(安卓)NestedScrolling机制完全解析 带你玩转嵌套滑动
  5. 腾讯T3大牛带你了解 2019 Android开发趋势及必备技术点!
  6. android 带你从源码的角度解析Scroller的滚动实现原理
  7. Android(安卓)AsyncTask完全解析,带你从源码的角度彻底理解
  8. Android(安卓)LayoutInflater原理分析,带你一步步深入了解View(一
  9. Android事件分发机制完全解析,带你从源码的角度彻底理解(上)

随机推荐

  1. web前端复习(二):js日期操作,实现时间显
  2. Jquery验证插件,获取错误字符串
  3. 打开后,JQuery ui对话框调整大小
  4. jQuery Sortable - 事件被调用太多次了
  5. Ajax_04之jQuery中封装的Ajax函数
  6. 从零搭建个人博客(3)-如何在webpack环境
  7. jquery过滤class为aa的div
  8. jQuery show()用于隐藏Twitter引导css类
  9. 26、ASP.NET MVC入门到精通——后台管理
  10. JQUERY 如何选择某个ID为AAA的DIV下的所