📜  Teradata-案例和凝聚力

📅  最后修改于: 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;

空IF

如果参数相等,则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