ページの先頭行へ戻る
Symfoware Server V10.0.0 SQLリファレンス

2.6 CASE式

機能

条件付けられた値を指定します。

記述形式

構文要素の構成

参照項番

一般規則

CASE略式
NULLIF
  • NULLIFは、第1オペランドと第2オペランドが等しい場合にNULL値、そうでない場合に第1オペランドの値を返却します。

  • NULLIF(V1,V2)は、以下のCASE指定と同じです。

    CASE WHEN V1=V2 THEN NULL ELSE V1 END
  • NULLIFの値式の両方に動的パラメタ指定を指定することはできません。

  • NULLIFの1番目または2番目の値式に動的パラメタ指定が指定された場合、DESCRIBE情報はもう一方の値式のデータ型となります。

  • 値式に順序を指定することはできません。

COALESCE
  • COALESCEは、指定したオペランドの値式のうちで最初に出現したNULL値でない値を返却します。すべての値式がNULL値の場合は、最後のオペランドの値を返却します。

  • COALESCE (V1,V2)は、以下のCASE指定と同じです。

    CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END
  • COALESCE(V1,V2・・・,Vn)は、以下のCASE指定と同じです。

    CASE WHEN V1 IS NOT NULL THEN V1 ELSE
              COALESCE(V2,・・・,Vn) END
  • COALESCEの値式すべてに動的パラメタ指定を指定することはできません。

  • COALESCEの値式に動的パラメタ指定が指定された場合、DESCRIBE情報は他のすべての値式に対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。

  • 値式に順序を指定することはできません。

CASE指定
  • CASE指定が単純CASEの場合、以下のようになります。

    • 各WHENオペランドの値式のデータ型は、CASEオペランドの値式のデータ型と比較可能でなければなりません。比較可能なデータ型に関する規則は、“2.11.1 比較述語”を参照してください。

    • 単純CASE指定は、各探索WHEN句を“CASEオペランド=WHENオペランド”の形式で指定した探索CASEと同じです。

      CASE V1 WHEN V2 THEN V3
              WHEN V4 THEN V5
                      ELSE V6 END
        
                ↓同じ
        
      CASE WHEN V1=V2 THEN V3
           WHEN V1=V4 THEN V5
                      ELSE V6 END
  • CASEオペランド、WHENオペランドおよび探索条件に順序を指定することはできません。

  • CASE指定の少なくとも1つの結果には結果式を指定しなければなりません。

  • ELSEの指定がない場合、ELSE NULLが指定されたものとみなします。

  • CASE指定の結果のデータ型は、すべての結果に対して集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。

  • 探索CASEの探索条件には副問合せは指定できません。

  • CASE指定の結果式すべてに動的パラメタ指定を指定することはできません。

  • 単純CASEのCASEオペランド、複数のWHENオペランドすべてに動的パラメタ指定を指定することはできません。

  • 動的パラメタ指定が指定された場合のDESCRIBE情報は、以下のとおりです。

    • CASE指定の結果式に動的パラメタ指定が指定された場合、DESCRIBE情報は他の結果式に指定された値式に対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。

    • 単純CASEのWHENオペランドに動的パラメタ指定が指定された場合、DESCRIBE情報はCASEオペランドと他のすべてのWHENオペランドに対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。

    • 単純CASEのCASEオペランドに動的パラメタ指定が指定された場合、DESCRIBE情報はすべてのWHENオペランドに対して、集合演算(UNION)におけるデータ変換で示す規約を適用することで決定されます。結果のデータ型については、“表3.9 集合演算(UNION)におけるデータ変換”を参照してください。

使用例

1

CASE略式、NULLIF指定の場合

利用者表から、名前の愛称を求めます。ただし、愛称は名前とは異なる内容の設定がある場合のみ取り出します。

SELECT 名前,NULLIF(愛称,名前) AS 愛称
    FROM 利用者表


2

CASE略式、COALESCE指定の場合

利用者表から、メールアドレス、TEL番号、住所の優先順で最初のNULL値以外のデータを求めます。

SELECT 利用者, COALESCE(メール,TEL,住所) AS 連絡先
    FROM 利用者表


3

CASE指定、単純CASE指定の場合

履歴表から、利用者ごとに利用したサービスの回数をサービス別に求めます。

SELECT 利用者,COUNT(CASE サービス WHEN 1
               THEN サービス ELSE NULL END) AS サービス1
             ,COUNT(CASE サービス WHEN 2
               THEN サービス ELSE NULL END) AS サービス2
             ,COUNT(CASE サービス WHEN 3
               THEN サービス ELSE NULL END) AS サービス3
    FROM 履歴表 GROUP BY 利用者


4

CASE指定、探索CASE指定の場合

履歴表から、利用者ごとに利用したサービスの回数をサービス別に求めます。

SELECT 利用者,COUNT(CASE WHEN サービス = 1
               THEN サービス ELSE NULL END) AS サービス1
             ,COUNT(CASE WHEN サービス = 2
               THEN サービス ELSE NULL END) AS サービス2
             ,COUNT(CASE WHEN サービス = 3
               THEN サービス ELSE NULL END) AS サービス3
    FROM 履歴表 GROUP BY 利用者