开发手册 欢迎您!
软件开发者资料库

Teradata - CASE和COALESCE

Teradata CASE和COALESCE - 从简单和简单的步骤学习Teradata,从基本到高级概念,包括简介,安装,架构,关系概念,数据类型,表,数据操作,SELECT语句,逻辑和条件运算符,SET运算符,字符串操纵,日期/时间函数,内置函数,聚合函数,CASE和COALESCE,主索引,连接,子查询,表类型,空间概念,二级索引,统计,压缩,解释,哈希算法,JOIN索引,视图,宏,存储过程,JOIN策略,分区主索引,OLAP功能,数据保护,用户管理,性能调整,FastLoad,MultiLoad,FastExport,BTEQ。

本章解释了Teradata的CASE和COALESCE函数.

CASE表达式

CASE表达式根据条件或WHEN子句计算每一行返回第一个匹配的结果.如果没有匹配,则返回ELSE部分的结果.

语法

以下是CASE表达式的语法.

CASE  WHEN  THEN result-1 WHEN  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