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