CASE 条件式
CASE 式は条件式であり、他の言語で使われる if/then/else ステートメントと似ています。CASE は、複数の条件がある場合に結果を指定するために使用されます。SELECT コマンドでなど、SQL 式が有効な場合に CASE を使用してください。
2 種類の CASE 式 (簡易および検索) があります。
簡易 CASE 式では、式は値と比較されます。一致が検出された場合、THEN 句で指定されたアクションが適用されます。一致が検出されない場合、ELSE 句のアクションが適用されます。
検索 CASE 式では、CASE ごとにブール式に基づいて検証され、CASE ステートメントは最初を一致する CASE を返します。WHEN 句で検出されない場合、ELSE 句のアクションが返されます。
構文
条件を満たすために使用される簡易 CASE ステートメント
CASE expression WHEN value THEN result [WHEN...] [ELSE result] END
各条件を検証するために使用する検索 CASE ステートメント
CASE WHEN condition THEN result [WHEN ...] [ELSE result] END
引数
- expression
-
列名または有効な式。
- value
-
数値定数または文字列などの式を比較する値。
- result
-
式またはブール条件が検証されるときに返されるターゲット値または式。すべての結果式のデータタイプは、単一の出力タイプに変換できる必要があります。
- condition
-
true または false に評価される Boolean 式。条件が true の場合、CASE 式の値は条件に続く結果であり、残りの CASE 式は処理されません。条件が false の場合、後続の WHEN 句はすべて評価されます。WHEN 条件の結果がどれも true ではない場合、CASE 式の値が ELSE 句の結果になります。ELSE 句が省略され、どの条件も true ではない場合、結果は Null となります。
例
次の例では、サンプル TICKIT データの VENUE テーブルと SALES テーブルを使用しています。詳細については、「サンプルデータベース」を参照してください。
簡易 CASE 式を使用し、VENUE テーブルに対するクエリで New York City
を Big Apple
に置換します。その他すべての都市名を other
に置換します。
select venuecity, case venuecity when 'New York City' then 'Big Apple' else 'other' end from venue order by venueid desc;
venuecity | case -----------------+----------- Los Angeles | other New York City | Big Apple San Francisco | other Baltimore | other ...
検索 CASE 式を使用し、それぞれのチケット販売の PRICEPAID 値に基づいてグループ番号を割り当てます。
select pricepaid, case when pricepaid <10000 then 'group 1' when pricepaid >10000 then 'group 2' else 'group 3' end from sales order by 1 desc;
pricepaid | case ----------+--------- 12624 | group 2 10000 | group 3 10000 | group 3 9996 | group 1 9988 | group 1 ...