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
示例
考虑以下员工表。
员工编号 |
名字 |
姓氏 |
加入日期 |
部门编号 |
出生日期 |
101 |
迈克 |
詹姆斯 |
2005/3/27 |
1 |
1/5/1980 |
102 |
罗伯特 |
威廉姆斯 |
4/25/2007 |
2 |
3/5/1983 |
103 |
彼得 |
保罗 |
3/21/2007 |
2 |
4/1/1983 |
104 |
亚历克斯 |
斯图尔特 |
2/1/2008 |
2 |
11/6/1984 |
105 |
罗伯特 |
詹姆斯 |
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)
示例
如果 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