SQLで条件岐はCASE式!サンプルでエクセルif文と比較解説

SQLで条件岐はCASE式! サンプルでエクセルif文と比較解説

条件分岐をするためにエクセルやプログラムで使われるIF文はSQLではCASE式を使います。条件抽出のWHEREと違うのは、CASE式で作成した条件で新しいカラムを追加できることです。SQLのCASE式(条件分岐)は構文が長くなってしまうデメリットがあるものの処理スピードが速いメリットはあります。

本記事では、SQLで条件分岐するためのCASE式の基本構文からサンプルデータを用いて、実際どのようにしてSQLを書くのかをご紹介致します。

目次

SQLのCASE式がどのようなものかエクセルに例えて解説

SQLのCASE式はエクセルのIF文(条件式)と同じ役割

エクセルの表データから〇〇以上などの条件式をIF文を利用して入力し、新しいセルに値を入れるケースがあります。SQLでも同じような方法をCASE式で実現することができます。例を見てみましょう。

SQL構文例に使うサンプルファイル

下記データを例にコードをご紹介いたします。

■商品情報ファイル1

カテゴリ商品名原価個数在庫金額販売開始日販売終了日
1カビキラー1158111582025/01/202025/03/20

SQLで条件分岐する時の具体例

上記データから在庫金額に着目し、1,000円以上が高額商品1,000円未満を低額商品と条件分岐して新しいカラム名(単価レベル)を追加したイメージが下記です。

元データ

商品名在庫金額
カビキラー1158
はさみ300
掃除機5000

条件分岐処理後データ

商品名在庫金額単価レベル
カビキラー1158高額商品
はさみ300低額商品
掃除機5000高額商品
上記例をエクセルのIF文で表現

=IF(対象セル >1000,”低額商品”,”高額商品” )

エクセルでは新しいカラム名(単価レベル)は別途手入力しますが、SQLの場合は事前に新しいカラム名を指定する所が違います。では、SQLのCASE式を利用したコード例をご紹介します。

SQLのCASE式の構文とポイントをサンプルを用いて解説

SQLのCASE式の書き方(基本)

SQLのCASE式は下記のように書きます。

CASE式の構文

CASE カラム名
WHEN 条件式1 THEN 条件を満たした結果1
WHEN 条件式2 THEN 条件を満たした結果2

ELSE 上記条件にあてはまらない場合の全ての結果
END

CASE式ポイント① SELECT部分にCASE式を記載する

CASE式をSQL文のどこに入れるか?ですがSELECTの部分に記載します。CASE式で書かれた条件は新しいカラム名になるので、SELECTでカラム名を指定するイメージです。(例は下記)

SELECT
カラム名,
CASE カラム名
WHEN 条件1 THEN 結果1
WHEN 条件2 THEN 結果2

ELSE 上記条件にあてはまらない場合の全ての結果
END


FROM テーブル名

CASE式ポイント② CASE式ではCASE,WHEN,THEN,ELSE,ENDを全て入れる必要がある

CASE式ではCASE,WHEN,THEN,ELSE,ENDを全て入れないと動作しないお作法があります。漏れがないように記載しましょう。

SQLのCASE式のコード例

上記で解説したエクセル例を参考にSQLのCASEを使った構文例をご紹介します。

CASE 商品名,在庫金額,
WHEN 在庫金額 >1000 THEN ‘低額商品’
ELSE ‘高額商品’
END AS 単価レベル
FROM ‘商品情報ファイル1’

条件式で作成されるカラム名をわかりやすい名前に変換した方がよいのでAS カラム名(単価レベル)として追記しています。

SQLのCASE式のコード例(複数条件例)

複数条件を指定する場合はWHENTHENを追記していく方法になります。下記例では500円以下をセール品として条件追加した構文にしました。

CASE 商品名,在庫金額,
WHEN 在庫金額 >500 THEN ‘セール品’
WHEN 在庫金額 >1000 THEN ‘低額商品’
ELSE ‘高額商品’
END AS 単価レベル
FROM ‘商品情報ファイル1’

SQLのCASE式で複数条件を記載する場合は記載する順番に注意する

SQLのCASE式は上から順番に処理されます。記載する順番が異なると結果が変わってしまうので注意が必要です。

例えば順番を入れ替えた下記のケース①②を見るとケース①では、最初に500円未満の商品をセール品。その後に1000円未満が低額商品となりますが、ケース②では最初に1000円未満の条件で低額商品と値が入るので、次の500円未満の条件前に値があるので、500円未満の条件であうセール品という値は出てきません。

ケース①
WHEN 在庫金額 >500 THEN ‘セール品’
WHEN 在庫金額 >1000 THEN ‘低額商品’

ケース②
WHEN 在庫金額 >1000 THEN ‘低額商品’
WHEN 在庫金額 >500 THEN ‘セール品’

SQLのCASE式で他に気を付けるポイント

ELSEは省略できるがNULL値となってデータが扱いにいのでELSE推奨

SQLのCASE式でELSEは省略できますが、ELSE部分に当てはまる値が出た場合NULL値になります。NULLはデータを扱ううえで厄介なことが多いですし、第3者とデータを共存することを考えると何かしらの値をELSEで埋めておいた方が安全です。可能な限りELSEを入れて対応しましょう。

ENDの記載漏れでエラーになる場合が多い

SQLのCASE文は最後にENDを記載しないとエラーになってしまいます。エクセルではENDを記載しないので、SQLに慣れていない方がENDを記載し忘れてエラーになるケースが多いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

著者:ブロガー2つ(につ)

■サイト設立目的
人海戦術の時代からテクノロジー活用による自動化促進の時代に変化。テクノロジー活用を促進するための情報共有やテクノロジー支援を行います。

目次