Teradata-case-and-coalesce

提供:Dev Guides
移動先:案内検索

Teradata-ケースとコアレス

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

ケース式

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

構文

CASE式の構文は次のとおりです。

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

ELSE
   Result-n
END

次のEmployeeテーブルを検討してください。

EmployeeNo FirstName LastName JoinedDate DepartmentNo BirthDate
101 Mike James 3/27/2005 1 1/5/1980
102 Robert Williams 4/25/2007 2 3/5/1983
103 Peter Paul 3/21/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/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は、式の最初の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