📜  Teradata案例和COALESCE

📅  最后修改于: 2021-01-11 11:24:40             🧑  作者: Mango

Teradata的案例和成见

CASE和COALESCE这两个函数在Teradata中都用于不同的目的。两种功能具有不同的功能。

案例表达

Teradata CASE语句提供了灵活性,可以根据表达式中指定的条件获取列的备用值。

CASE表达式根据条件或WHEN子句评估每一行,如果没有匹配项,则返回第一个匹配项的结果,然后从返回的ELSE部分返回结果。

句法

以下是CASE表达式的语法。

CASE  
WHEN  THEN result-1 
WHEN  THEN result-2 

ELSE  
   Result-n 
END

考虑下表中的以下Employee记录。

Employee_Id Age Salary Marital_Status
202001 22 20,000 1
202002 25 25,000 1
202003 30 35,000 2
202004 26 32,000 2
202005 32 40,000 2

在上面的示例中,我们评估了Marital_Status列。如果婚姻状况为“单身”,则返回1;如果婚姻状况为已婚,则返回2。否则,它将返回“不确定”值。

现在,我们将在Marital_Status列上应用CASE语句,如下所示:

SELECT 
   Employee_Id, 
   Age,
   Salary,

CASE WHEN Marital_Status= 1 THEN 'Single'
           WHEN Marital_Status= 2 THEN 'Married'
ELSE 'Not Sure'
END 

执行完以上代码后,将产生以下输出。

上面的CASE表达式也可以按以下方式编写,将产生与上面相同的结果。

SELECT 
   Employee_Id,
   Age,
   Salary,

 CASE Marital_Status When 1 THEN 'Single'
            WHEN 2 THEN 'Married'
ELSE 'Not Sure'
END AS Marital_Status
FROM Employee;

COALESCE表达

Teradata COALESCE用于NULL处理。 COALESCE是一个返回表达式的第一个非空值的语句。如果表达式的所有参数求值为NULL,则返回NULL。以下是语法。

句法

这是COALESCE函数的基本语法:

COALESCE(expression 1, expression 2, ....... expression n) 

考虑下面的学生表。

现在,我们可以使用COALESCE函数优先选择哪个电话号码,如下所示:

SELECT 
Roll_No,
First_Name,
Last_Name,
COALESCE(Landline_no, Mobile_no, 'phone# not available') AS phone_no
FROM Student;

在上面的示例中,我们将首先搜索Landline_no。如果为NULL,它将分别搜索Mobile_no。如果两个数字均为NULL,则返回不可用。而且,如果没有一个参数返回值(不是NULL值),它将从这些列返回默认值。

当我们执行以上查询时,它将生成以下输出。

空IF

如果参数相等,则NULLIF语句返回NULL。

句法

以下是NULLIF语句的语法。

NULLIF(expression 1, expression 2) 

下面的示例如果Mobile_No等于0,则返回NULL。否则,返回Mobile_No值。

SELECT 
   Roll_No,  
   NULLIF(Mobile_no, 0) AS Mobile 
FROM Student;

上面的查询返回以下记录。我们可以看到Roll_No 101和104的Mobile为NULL。