SQLのCASEを使って条件ごとに値を変換する

SQLロゴ

テーブルのとあるフィールド(列)の値ごとに、SELECTで出力する値を変換したい時があります。
例えば、会員テーブルの性別をいうフィールドに性別を表す数値が登録されていて、性別フィールドの値が「1」なら「男性」という文字列を、「2」なら「女性」という文字列を、その他は「不明」という文字列を取得したい場合などです。
そんな時は、SQLのCASE演算子を使うと、簡単に値を変換することができます。
CASE演算子は、任意の条件に一致する場合に、任意の値に変換することができる便利な演算子です。

テーブルの準備

会員テーブルの定義と、登録されているデータが、以下のようになっているとします。

テーブルの定義

テーブル名 テーブルID
会員テーブル TBL_MEMBER
No フィールド名 フィールドID
1 会員ID MEMBER_ID
2 性別 SX_CODE
3 体重 WEIGHT

テーブルに登録されているデータ

No MEMBER_ID SX_CODE WEIGHT
1 001 1 86.1
2 002 2 132.8
3 003 NULL 71.9
4 004 2 53.6
5 005 1 103.8
6 006 1 65.4

SELECT文の作成と取得結果

会員テーブルの性別フィールドの値によって

  • 1 = 男性
  • 2 = 女性
  • 他 = 不明

という値に変換した値を取得するSQLは

のようになり

No MEMBER_ID SEIBETSU
1 001 男性
2 002 女性
3 003 不明
4 004 女性
5 005 男性
6 006 男性

のような結果が取得できます。

[CASE SX_CODE WHEN 1 THEN ‘男性’] の部分は
[CASE WHEN SX_CODE = 1 THEN ‘男性’] と記述することもできます。

SQLを変更して

と記述しても同じ結果が取得できます。

CASE WHEN 式 THEN の形式

[CASE WHEN フィールド = 条件値 THEN 変換値] の
[フィールド = 条件値] の部分は「式」なので [=] の他に、[<] [>] [<=] [>=] を使うこともできます。
会員テーブルを使って、会員の「体重(WEIGHT)」が100kg以上の場合は「特別メニュー」、100kg未満の場合は「通常メニュー」という値を取得するには

というSQLを記述することで

No MEMBER_ID WEIGHT MENU
1 001 86.1 通常メニュー
2 002 132.8 特別メニュー
3 003 71.9 通常メニュー
4 004 53.6 通常メニュー
5 005 103.8 特別メニュー
6 006 65.4 通常メニュー

のような結果が取得できます。

ちなみにSQLのCASE演算子は、SELECT句だけでなく、FROM句、WHERE句などでも使うことができます。

おすすめの書籍