SQL 構文リファレンス : CASE(式)
 
このページをシェアする                  
CASE(式)
CASE 式は値を返します。CASE 式には 2 つの形式があります。
単一 When/Then。この形式は、1 つの値式を一連の値式と比較して結果を判定します。値式は、それらが列挙されている順に評価されます。値式が TRUE と評価された場合、CASE は THEN 句の値式を返します。
検索 When/Then。この形式は、一連のブール式を評価して結果を判定します。ブール式は、それらが列挙されている順に評価されます。ブール式が TRUE と評価された場合、CASE は THEN 句の式を返します。
どちらの形式もオプションの ELSE 引数をサポートしています。ELSE 句を使用しない場合は、ELSE NULL であることを意味します。
構文
単一 When/Then:
CASE case値式
WHEN when式 THEN then式 [...]
[ELSE else式]
END
 
検索 When/Then:
CASE
WHEN 検索式 THEN then式 [...]
[ELSE else式]
END
引数
case値式 ::= 単一 When/Then 形式の CASE で評価される式。
 
when式 ::= case 値式と比較される式。case 値式と各 when 式のデータ型は同じであるか、または暗黙に型変換されなければなりません。
 
then式 ::= case 値式 = when 式が TRUE と評価された場合に返される式。
 
else式 ::= TRUE と評価される比較演算がない場合に返される式。この引数を省略した場合、TRUE と評価される比較演算がなければ、CASE は NULL を返します。
 
検索式 ::= 検索形式の CASE で評価されるブール式。検索式には、有効なブール式であればどのような式でも指定できます。
備考
CASE 式は SELECT ステートメント内で使用する必要があります。SELECT ステートメントはストアド プロシージャやビュー内に記述できます。
次のステートメントは、単一 When/Then 形式を使って、Course テーブルにリストされている美術講座の必須条件をレポートします。
SELECT name 'Course ID', description 'Course Title',
  CASE name
    WHEN 'Art 101' THEN 'None'
    WHEN 'Art 102' THEN 'Art 101 or instructor approval'
    WHEN 'Art 203' THEN 'Art 102'
    WHEN 'Art 204' THEN 'Art 203'
    WHEN 'Art 305' THEN 'Art 101'
    WHEN 'Art 406' THEN 'None'
    WHEN 'Art 407' THEN 'Art 305'
  END
AS 'Prerequisites' FROM Course WHERE Dept_Name = 'Art' ORDER BY name
このクエリによって次の一覧が返されます。
Course ID
Course Title
Prerequisites
Art 101
Drawing I
None
Art 102
Drawing II
Art 101 or instructor approval
Art 203
Drawing III
Art 102
Art 204
Drawing IV
Art 203
Art 305
Sculpture
Art 101
Art 406
Modern Art
None
Art 407
Baroque Art
Art 305
============ 
前のステートメントに ELSE 句を含めるように変更できます。
SELECT name 'Course ID', description 'Course Title',
  CASE name
    WHEN 'Art 101' THEN 'None'
    WHEN 'Art 102' THEN 'Art 101 or instructor approval'
    WHEN 'Art 203' THEN 'Art 102'
    WHEN 'Art 204' THEN 'Art 203'
    WHEN 'Art 305' THEN 'Art 101'
    ELSE 'Curriculum plan for Art History majors'
  END
AS 'Prerequisites' FROM Course WHERE Dept_Name = 'Art' ORDER BY name
このクエリによって今度は次の一覧が返されます。
Course ID
Course Title
Prerequisites
Art 101
Drawing I
None
Art 102
Drawing II
Art 101 or instructor approval
Art 203
Drawing III
Art 102
Art 204
Drawing IV
Art 203
Art 305
Sculpture
Art 101
Art 406
Modern Art
Curriculum plan for Art History majors
Art 407
Baroque Art
Curriculum plan for Art History majors
============ 
次のステートメントでは検索 When/Then 形式を使って、個人別に資格のある奨学金プログラムをレポートします。
SELECT last_name, first_name,
  CASE
    WHEN scholarship = 1 THEN 'Scholastic'
    WHEN citizenship <> 'United States' THEN 'Foreign Study'
    WHEN (date_of_birth >= '1960-01-01' AND date_of_birth <= '1970-01-01') THEN 'AJ-44 Funds'
    ELSE 'NONE'
  END
AS 'Funding Program' FROM Person ORDER BY last_name
以下に、このクエリによって返される一覧の一部を示します。
Last_Name
First_Name
Funding Program
Abad
Alicia
NONE
Abaecherli
David
Foreign Study
Abebe
Marta
Foreign Study
Abel
James
AJ-44 Funds
Abgoon
Bahram
Foreign Study
Abken
Richard
NONE
Abu
Austin
Foreign Study
Abuali
Ibrahim
AJ-44 Funds
Acabbo
Joseph
NONE
Acar
Dennis
Foreign Study
============ 
次の例は、ストアド プロシージャ内で CASE 式を使用する方法を示します。
CREATE PROCEDURE pcasetest () RETURNS (d1 CHAR(10), d2 CHAR(10));
BEGIN
  SELECT c1, CASE WHEN c1 = 1 THEN c4
    WHEN c1 = 2 THEN c5
    ELSE
      CASE WHEN c2 = 100.22 THEN c4
        WHEN c2 = 101.22 THEN c5 END END
  FROM tcasetest;
END
 
CALL pcasetest
============ 
次の例は、ビュー内で CASE 式を使用する方法を示します。
CREATE VIEW vcasetest (vc1, vc2) AS
SELECT c1, CASE WHEN c1 = 1 THEN c4
  WHEN c1 = 2 THEN c5
  ELSE
    CASE WHEN c2 = 100.22 THEN c4
      WHEN c2 = 101.22 THEN c5 END END
FROM TCASEWHEN
 
SELECT * FROM vcasetest
関連項目
COALESCE
SELECT