完整原文链接:https://blog.csdn.net/rongtaoup/article/details/82183743
    类似java中的switch和if的结合,在满足when的条件后,执行then的结果,如果都不满足则执行else后的语句。

    1. CASE case_value
    2. WHEN when_value1 THEN
    3. statement_list1
    4. WHEN when_value2 THEN
    5. statement_list2
    6. ELSE
    7. statement_list
    8. END;

    简单CASE WHEN函数:

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

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

    1. CASE WHEN SCORE = 'A' THEN '优'
    2. WHEN SCORE = 'B' THEN '良'
    3. 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语句。

    格式:

    1. CASE WHEN condition THEN result
    2. [WHEN...THEN...]
    3. ELSE result
    4. END

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

    下面介绍几种常用场景。
    在表中查询性别,1为男生,0为女生

    1. SELECT Name as 姓名,
    2. CASE
    3. WHEN Sex='1' THEN '男'
    4. WHEN Sex='0' THEN '女'
    5. END as 性别
    6. FROM employees;

    其中where会将case中的值作为查询条件和列名,所以一定要在后面用case指定别名。
    场景1:**有分数score,score<60返回不及格,score>=60返回及格,score>=80返回优秀**

    1. SELECT
    2. STUDENT_NAME,
    3. (CASE WHEN score < 60 THEN '不及格'
    4. WHEN score >= 60 AND score < 80 THEN '及格'
    5. WHEN score >= 80 THEN '优秀'
    6. ELSE '异常' END) AS REMARK
    7. FROM
    8. TABLE

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

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

    多种场景,建议看原文。