Teradata - CASE e COALESCE

Este capítulo explica as funções CASE e COALESCE do Teradata.

Expressão CASE

A expressão CASE avalia cada linha em relação a uma condição ou cláusula WHEN e retorna o resultado da primeira correspondência. Se não houver correspondências, o resultado da parte ELSE será retornado.

Sintaxe

A seguir está a sintaxe da expressão CASE.

CASE <expression> 
WHEN <expression> THEN result-1 
WHEN <expression> THEN result-2 

ELSE  
   Result-n 
END

Exemplo

Considere a seguinte tabela de funcionários.

EmployeeNo Primeiro nome Último nome Data de adesão Departamento Não Data de nascimento
101 Mike James 27/03/2005 1 05/01/1980
102 Robert Williams 25/04/2007 2 05/03/1983
103 Peter Paulo 21/03/2007 2 01/04/1983
104 Alex Stuart 01/02/2008 2 06/11/1984
105 Robert James 04/01/2008 3 01/12/1984

O exemplo a seguir avalia a coluna DepartmentNo e retorna o valor 1 se o número do departamento for 1; retorna 2 se o número do departamento for 3; caso contrário, ele retorna o valor como departamento inválido.

SELECT 
   EmployeeNo, 
CASE DepartmentNo 
   WHEN 1 THEN 'Admin' 
   WHEN 2 THEN 'IT' 
ELSE 'Invalid Dept'
   END AS Department 
FROM Employee;

Quando a consulta acima é executada, ela produz a seguinte saída.

*** 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

A expressão CASE acima também pode ser escrita da seguinte forma, que produzirá o mesmo resultado acima.

SELECT 
   EmployeeNo, 
CASE  
   WHEN DepartmentNo = 1 THEN 'Admin' 
   WHEN  DepartmentNo = 2 THEN 'IT' 
ELSE 'Invalid Dept' 
   END AS Department  
FROM Employee;

COALESCE

COALESCE é uma instrução que retorna o primeiro valor não nulo da expressão. Ele retorna NULL se todos os argumentos da expressão forem avaliados como NULL. A seguir está a sintaxe.

Sintaxe

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

Exemplo

SELECT 
   EmployeeNo, 
   COALESCE(dept_no, 'Department not found') 
FROM  
   employee;

NULLIF

A instrução NULLIF retorna NULL se os argumentos forem iguais.

Sintaxe

A seguir está a sintaxe da instrução NULLIF.

NULLIF(expression 1, expression 2)

Exemplo

O exemplo a seguir retorna NULL se o DepartmentNo for igual a 3. Caso contrário, ele retornará o valor DepartmentNo.

SELECT 
   EmployeeNo,  
   NULLIF(DepartmentNo,3) AS department 
FROM Employee;

A consulta acima retorna os seguintes registros. Você pode ver que o funcionário 105 tem o número do departamento. como 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