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
関連項目