Microsoft AccessのSQL条件分岐はCASE式不可、Switch関数を使う

Microsoft Access データベース
この記事は約4分で読めます。

※当ブログではアフィリエイト広告を利用しています。

Microsoft Accessはリレーショナルデータベースなので、SQLクエリを実行できます。

SQLの条件分岐でよく使うCASE式(CASE~WHEN~THEN~END)は、Oracle・PostgreSQL・MySQL・SQL Serverなど主要なRDBMSでは使用できます。
しかし、Accessでは使用できません。
AccessでCASE式と同じような条件分岐をしたい場合は、Switch関数を使用すればできます。

なお、今回のバージョンは以下の通りです。

  • Access バージョン1909(Microsoft Office 365 ProPlus)

Switch関数の構文と使い方

Switch関数の構文はこちらです。
条件式と条件式が真(TRUE)の時に返す値をカンマ区切りで繋げていきます。

【構文】
Switch(expression-1, value-1 [, expression-2, value-2] …)

SELECT文で使うことが多いので、サンプルで以下のようなテーブルを用意しました。

seimeiscore
佐藤一郎95
鈴木二郎71
田中三郎80
高橋四郎56
山田五郎62

以下のように、点数(score)の範囲によって成績(grade)を割り当てます。

  • 90点以上 … A
  • 80~89点 … B
  • 70~79点 … C
  • 60~69点 … D
  • 59点以下 … E

Switch関数を使ったSQLはこのようになります。
点数の条件式とその条件に当てはまる成績を並べています。

SELECT
  sei
 ,mei
 ,score
 ,SWITCH(
   score >= 90, 'A'
  ,score >= 80 AND score <= 89, 'B'
  ,score >= 70 AND score <= 79, 'C'
  ,score >= 60 AND score <= 69, 'D'
  ,score <= 59, 'E'
  ) AS grade
FROM
  student;

結果はこちらです。

seimeiscoregrade
佐藤一郎95A
鈴木二郎71C
田中三郎80B
高橋四郎56E
山田五郎62D

ちなみに、gradeという別名を付けていますが、この項目で並び替えやグループ化する場合は、以下のようにGROUP BY句やORDER BY句に全文を記述しないといけません。

SELECT
  sei
 ,mei
 ,score
 ,SWITCH(
   score >= 90, 'A'
  ,score >= 80 AND score <= 89, 'B'
  ,score >= 70 AND score <= 79, 'C'
  ,score >= 60 AND score <= 69, 'D'
  ,score <= 59, 'E'
  ) AS grade
FROM
  student
ORDER BY
  SWITCH(
   score >= 90, 'A'
  ,score >= 80 AND score <= 89, 'B'
  ,score >= 70 AND score <= 79, 'C'
  ,score >= 60 AND score <= 69, 'D'
  ,score <= 59, 'E'
  );

このサンプルではあまり意味のない並び替えですが。

なお、この記述はAccessの場合ですが、RDBMSによって微妙に異なります。

IIF関数でも可能だが入れ子が複雑になる

Access・SQL Serverでは、Switch関数以外にもIIF関数という似たようなものがあります。
こちらでも上記のSwitch関数のような条件分岐は可能ですが、条件が複数の場合は入れ子が複雑になるので、あまりおすすめはしません。

IIF関数の構文はこちらです。
条件式と条件式が真(TRUE)の時に返す値、偽(FALSE)の時に返す値を一文で記述できます。

【構文】
IIF(expression, true_value, false_value)

IIF関数を使ったSQLはこのようになります。

SELECT
  sei
 ,mei
 ,score
 ,IIF(score >= 90, 'A', IIF(score >= 80 AND score <= 89, 'B', IIF(score >= 70 AND score <= 79, 'C', IIF(score >= 60 AND score <= 69, 'D', IIF(score <= 59, 'E'))))) AS grade
FROM
  student;

入れ子が多いので分かりにくさ半端ないです。。

最後に

今回は、Microsoft AccessのSQL条件分岐で使うSwitch関数を紹介しました。
Accessの場合は、他のRDBMSでは使えるCASE式が使えませんので、Switch関数で対応しましょう。

データベース
\よかったらシェアしてね!/
えふめん

大阪在住、30代。
業務系SE・社内SE。

PCトラブルの調査、自作デスクトップPCのこと、PC周辺機器のレビューなどの記事を書いています。

えふめんをフォローする
この記事が気に入ったら
いいね!しよう
最新情報をお届けします。

コメント

タイトルとURLをコピーしました