Introduction to Oracle CASE WHEN usage

Introduction to Oracle CASE WHEN usage

 

1. The CASE WHEN expression has two forms

 

copy code

--Simple Case function  

 

CASE sex  

WHEN '1' THEN '男'  

WHEN '2' THEN '女'  

ELSE 'other' END  

 

--Case search function  

 

CASE

WHEN sex = '1' THEN '男'  

WHEN sex = '2' THEN '女'  

ELSE 'other' END  

copy code

 

 

2. The usage of CASE WHEN in different positions in the statement

 

2.1 SELECT CASE WHEN usage

 

copy code

SELECT grade, COUNT (CASE WHEN sex = 1 THEN 1 /*sex 1 is a boy, 2 girls*/

                       ELSE NULL

                       END) number of boys,

                COUNT (CASE WHEN sex = 2 THEN 1

                       ELSE NULL

                       END) Number of girls

    FROM students GROUP BY grade;

copy code

 

 

2.3 WHERE CASE WHEN 用法

 

copy code

SELECT T2.*, T1.*

   FROM T1, T2

  WHERE (CASE WHEN T2.COMPARE_TYPE = 'A' AND

                   T1.SOME_TYPE LIKE 'NOTHING%'

                THEN 1

              WHEN T2.COMPARE_TYPE != 'A' AND

                   T1.SOME_TYPE NOT LIKE 'NOTHING%'

                THEN 1

              ELSE 0

           END) = 1

copy code

 

 

2.4 GROUP BY CASE WHEN 用法

 

copy code

SELECT  

CASE WHEN salary <= 500 THEN '1'  

WHEN salary > 500 AND salary <= 600  THEN '2'  

WHEN salary > 600 AND salary <= 800  THEN '3'  

WHEN salary > 800 AND salary <= 1000 THEN '4'  

ELSE NULL END salary_class, -- alias name

COUNT(*)  

FROM    Table_A  

GROUP BY  

CASE WHEN salary <= 500 THEN '1'  

WHEN salary > 500 AND salary <= 600  THEN '2'  

WHEN salary > 600 AND salary <= 800  THEN '3'  

WHEN salary > 800 AND salary <= 1000 THEN '4'  

ELSE NULL END;  

copy code

 

 

3. Other implementations of IF-THEN-ELSE

 

3.1 DECODE() function

 

select decode(sex, 'M', 'Male', 'F', 'Female', 'Unknown')

from   employees;

It seems that only Oracle provides this function, and it does not support ANSI SQL, and the syntax is not clear in CASE WHEN. Personally, it is not recommended to use it.

 

 

3.2 Special implementation in WHERE

 

SELECT T2.*, T1.*

   FROM T1, T2

  WHERE (T2.COMPARE_TYPE = 'A' AND T1.SOME_TYPE LIKE 'NOTHING%')

         OR

        (T2.COMPARE_TYPE != 'A' AND T1.SOME_TYPE NOT LIKE 'NOTHING%')

This method is also used in special cases, pay more attention to the logic and do not make mistakes.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326518075&siteId=291194637