Teradata-CASE 및 COALESCE
이 장에서는 Teradata의 CASE 및 COALESCE 기능에 대해 설명합니다.
CASE 표현식
CASE 표현식은 조건 또는 WHEN 절에 대해 각 행을 평가하고 첫 번째 일치의 결과를 반환합니다. 일치하는 항목이 없으면 ELSE 부분의 결과가 반환됩니다.
통사론
다음은 CASE 표현식의 구문입니다.
CASE <expression> 
WHEN <expression> THEN result-1 
WHEN <expression> THEN result-2 
ELSE  
   Result-n 
END 
    예
다음 Employee 테이블을 고려하십시오.
| 직원 아니요 | 이름 | 성 | JoinedDate | 부서 번호 | 생일 | 
|---|---|---|---|---|---|
| 101 | 마이크 | 제임스 | 2005 년 3 월 27 일 | 1 | 1980 년 1 월 5 일 | 
| 102 | 로버트 | 윌리엄스 | 2007 년 4 월 25 일 | 2 | 1983 년 3 월 5 일 | 
| 103 | 베드로 | 폴 | 2007 년 3 월 21 일 | 2 | 1983 년 4 월 1 일 | 
| 104 | 알렉스 | 스튜어트 | 2008 년 2 월 1 일 | 2 | 1984 년 11 월 6 일 | 
| 105 | 로버트 | 제임스 | 2008 년 1 월 4 일 | 삼 | 1984 년 12 월 1 일 | 
다음 예제는 DepartmentNo 열을 평가하고 부서 번호가 1 인 경우 값 1을 반환합니다. 부서 번호가 3이면 2를 반환합니다. 그렇지 않으면 값을 유효하지 않은 부서로 반환합니다.
SELECT 
   EmployeeNo, 
CASE DepartmentNo 
   WHEN 1 THEN 'Admin' 
   WHEN 2 THEN 'IT' 
ELSE 'Invalid Dept'
   END AS Department 
FROM Employee; 
    위 쿼리가 실행되면 다음과 같은 출력이 생성됩니다.
*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo    Department 
-----------   ------------ 
   101         Admin 
   104         IT 
   102         IT 
   105         Invalid Dept 
   103         IT 
    위의 CASE 표현식은 위와 동일한 결과를 생성하는 다음 형식으로도 작성할 수 있습니다.
SELECT 
   EmployeeNo, 
CASE  
   WHEN DepartmentNo = 1 THEN 'Admin' 
   WHEN  DepartmentNo = 2 THEN 'IT' 
ELSE 'Invalid Dept' 
   END AS Department  
FROM Employee; 
    COALESCE
COALESCE는 표현식의 널이 아닌 첫 번째 값을 리턴하는 명령문입니다. 표현식의 모든 인수가 NULL로 평가되면 NULL을 반환합니다. 다음은 구문입니다.
통사론
COALESCE(expression 1, expression 2, ....) 
    예
SELECT 
   EmployeeNo, 
   COALESCE(dept_no, 'Department not found') 
FROM  
   employee; 
    NULLIF
NULLIF 문은 인수가 같으면 NULL을 반환합니다.
통사론
다음은 NULLIF 문의 구문입니다.
NULLIF(expression 1, expression 2) 
    예
다음 예제에서는 DepartmentNo가 3이면 NULL을 반환합니다. 그렇지 않으면 DepartmentNo 값을 반환합니다.
SELECT 
   EmployeeNo,  
   NULLIF(DepartmentNo,3) AS department 
FROM Employee; 
    위 쿼리는 다음 레코드를 반환합니다. 직원 105에 부서 번호가 있음을 알 수 있습니다. NULL로.
*** Query completed. 5 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo      department 
-----------  ------------------ 
    101              1 
    104              2 
    102              2 
    105              ? 
    103              2