DEV/Database

[ORACLE] CASE WHEN THEN

Bi3a 2024. 1. 29. 00:26

728x90

DB를 학습합시다.


 

CASE WHEN THEN

Oracle에서 특정 조건을 조합하고 조건 그룹 별로 다른 연산을 수행하고자 할 때 사용하는 문법입니다.
타 언어에서의 if, else와 유사한 기능을 수행하는 문법입니다.

 

사용 방법

SELECT
    column1,
    column2,
    CASE
        WHEN column1 = condition1 THEN value1 # 칼럼1 의 값이 condition1일 때 value 1로 치환
        WHEN column2 = condition2 THEN value2 # 칼럼2 의 값이 condition2일 때 value 2로 치환
        ELSE default_value # default_value로 표시한다.
    END AS new_column # 이 칼럼명은 new_column 이다.
FROM
    your_table;

 

CASE 로 조건부 질의를 시작하여

  • WHEN 칼럼 = 값 1 THEN 값 2 : 칼럼의 값이 1일 때 값 2 로 치환한다.
  • ELSE default_value : 조건에 해당하지 않는 값은 default_value로 치환한다.
  • END AS new_column : 이 조건부 질의의 칼럼명은 new_column으로 정의한다.

의 맥락으로 사용한다.

 

사용 예시

문제 :
SEX_UPON_INTAKE 칼럼에 'Spayed' 혹은 'Neutered' 라는 값이 포함되어 있을 경우 O 값을, 아닐 경우 X 값을 표시하는 '중성화' 칼럼을 작성하시오.
결과값은 ID 순으로 정렬합니다.

 

[참고 테이블]

|| ANIMAL_ID || NAME  || SEX_UPON_INTAKE    ||
|-----------|--------|---------------------|
| 1         | Cat1   | Neutered Male       |
| 2         | Dog1   | Spayed Female       |
| 3         | Cat2   | Intact Male         |
| 4         | Dog2   | Unknown             |
| 5         | Cat3   | Spayed Female       |

 

[작성 코드]

SELECT 
    ANIMAL_ID, 
    NAME, 
    CASE
        WHEN SEX_UPON_INTAKE LIKE '%Neutered%' OR SEX_UPON_INTAKE LIKE '%Spayed%' THEN 'O'
        ELSE 'X'
    END AS "중성화"
FROM 
    ANIMAL_INS
ORDER BY 
    1;

 

[쿼리 결과]

|| ANIMAL_ID || NAME  || 중성화 ||
|-----------|--------|--------|
| 1         | Cat1   | O      |
| 2         | Dog1   | O      |
| 3         | Cat2   | X      |
| 4         | Dog2   | X      |
| 5         | Cat3   | O      |

 

 


틀린 부분이 있으면 댓글로 알려주세요!