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表.

EmployeeNoFirstNameLastNameJoinedDateDepartmentNoBirthDate
101MikeJames3/27/200511/5/1980
102RobertWilliams2007年4月25日23/5/1983
103Peter保罗2007年3月21日24/1/1983
104AlexStuart2008年2月1日211/6/1984
105RobertJames1/4/2008312/1/1984

以下示例评估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有部门号. as 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