カラムの値に応じて異なる結果を返す条件式の記述(CASE句)
CASE 句を使うことでカラムの値に対して条件分岐を行い異なる値を返すことができます。ここでは SQLite で CASE 句を使った条件分岐の記述方法について解説します。
(Last modified: )
CASE句を使った条件分岐
CASE 句を使った条件式の記述方法は大きく分けると2つの書式があります。まず1つ目の書式は次の通りです。条件を満たすかどうかを調べて値を返します。
SELECT CASE WHEN 条件式1 THEN 式1 WHEN 条件式2 THEN 式2 ELSE 式3 END FROM テーブル名;
条件式1が真の場合は式1を返し、条件式1が偽で条件式2が真の場合は式2を返し、いずれに条件式も偽の場合は式3が返されます。
----
では実際に試してみます。次のようなテーブルを作成しました。
create table test(name text, result integer);
INSERT 文を使ってテーブルにデータをいくつか格納しておきます。
insert into test values('Yamada', 85);
insert into test values('Kondo', 54);
insert into test values('Suzuki', 78);
insert into test values('Endou', 98);
insert into test values('Honda', 48);
insert into test values('Takahashi', 68);
それでは CASE 句を使用し result カラムの値に応じて異なる3つのデータを合わせて取得してみます。(下記では AS 句も合わせて使用し、 CASE 句で取得するデータのカラムに名前 judgment を設定しています)。
select name, result, case when result > 80 then 'Pass' when result > 60 then 'ReTest' else 'Fail' end as judgment from test;
設定した条件に応じた値を取得することができました。
CASE句を使った値のリストとの比較
続いて2つ目の書式です。複数の値と順次比較していき一致するところの値を返します。
SELECT CASE 式 WHEN 値1 THEN 式1 WHEN 値2 THEN 式2 ELSE 式3 END FROM テーブル名;
式の値が値1と等しい時は式1を返し、値2と等しい時は式2を返し、いずれにも一致しなかったときは式3が返されます。
----
では実際に試してみます。次のようなテーブルを作成しました。
create table user(name text, address text);
INSERT 文を使ってテーブルにデータをいくつか格納しておきます。
insert into user values('A_Electric', 'Tokyo');
insert into user values('B_Motor', 'Chiba');
insert into user values('C_Mobile', 'Kanagawa');
insert into user values('D_Shipping', 'Osaka');
それでは CASE 句を使用し address カラムの値に応じて異なるデータを合わせて取得してみます。(下記では AS 句も合わせて使用し、CASE 句で取得するデータのカラムに名前 Sales を設定しています)。
select name, address, case address when 'Tokyo' then 'Yamada' when 'Kanagawa' then 'Furuta' when 'Chiba' then 'Yamada' else 'Endo' end as sales from user;
設定した条件に応じた値を取得することができました。
-- --
CASE 句を使った条件分岐の記述方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。