カラムの値に応じて異なる結果を返す条件式の記述(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);

CASE句を使った条件分岐(1)

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句を使った条件分岐(2)

それでは 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句を使った条件分岐(3)

設定した条件に応じた値を取得することができました。

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);

CASE句を使った値のリストとの比較(1)

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句を使った値のリストとの比較(2)

それでは 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句を使った値のリストとの比較(3)

設定した条件に応じた値を取得することができました。

-- --

CASE 句を使った条件分岐の記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。