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表。员工编号 | 名字 | 姓 | 入职日期 | 部门 | 生日 |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/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是返回表达式的第一个非空值的语句。 如果表达式的所有参数计算结果为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)
例子
如果Department等于3,下面的示例返回NULL。否则,它返回Department No值。
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