Teradata-ケースとコアレス

この章では、TeradataのCASEおよびCOALESCE機能について説明します。

CASE式

CASE式は、条件またはWHEN句に対して各行を評価し、最初の一致の結果を返します。一致するものがない場合は、のELSE部分からの結果が返されます。

構文

以下は、CASE式の構文です。

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

ELSE  
   Result-n 
END

次のEmployeeテーブルについて考えてみます。

従業員番号 ファーストネーム 苗字 JoinedDate 部門番号 誕生日
101 マイク ジェームズ 2005年3月27日 1 1980年1月5日
102 ロバート ウィリアムズ 2007年4月25日 2 1983年3月5日
103 ピーター ポール 2007年3月21日 2 1983年4月1日
104 アレックス スチュアート 2008年2月1日 2 1984年11月6日
105 ロバート ジェームズ 2008年1月4日 3 1984年12月1日

次の例では、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と評価された場合、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には部門番号があることがわかります。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