SQL Engine Reference (v11)

CASE(式)

CASE 式は値を返します。CASE 式には 2 つの形式があります。

どちらの形式もオプションの 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

666

前のステートメントに 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

666

次のステートメントでは検索 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

666

次の例は、ストアド プロシージャ内で 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  
666

次の例は、ビュー内で 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


CASCADE

CASE(文字列)