📅  最后修改于: 2020-11-29 09:00:09             🧑  作者: Mango
本章介绍了Teradata的CASE和COALESCE功能。
CASE表达式根据条件或WHEN子句评估每一行,并返回第一个匹配项的结果。如果没有匹配项,则返回ELSE部分的结果。
以下是CASE表达式的语法。
CASE
WHEN THEN result-1
WHEN THEN result-2
ELSE
Result-n
END
考虑下面的雇员表。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
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;否则,返回值为1。如果部门编号为3,则返回2;否则,返回0。否则,它将返回值作为无效部门。
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语句返回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