OracleのCASE 条件をわける【SQL】

Oracleで条件をわけるには通常WHERE句を使用しますが、SELECT句の「CASE」でも条件わけができます。

「CASE」は非常に使い勝手のいいSQLなので、使い方をぜひマスターしたいところです。



2種類のCASE

CASEでは「値で判定するCASE」と「式で判定するCASE」の2種類あります。

1. CASE(値で分岐)

これはCASEを使う一番シンプルなパターンです。値のみで分岐した結果を返します。あまり使用しないかもしれません。

2. CASE(条件式で分岐)

こちらが最もよく使用するCASEの分岐です。条件式を使う事ができるため幅が広がります。WHENで条件式を記述し、SELECTしたい結果をTHENのあとに記述します。CASEの最後はENDでしめくくります。

それでは、CASEの使い方のいくつかのパターンを紹介します。

サンプルデータ

s_no s_name reader_f gender
A001 佐藤花子/学級委員 1
A002 田中太郎/書記 2
A003 加藤一 0
A004 青木花 0
A005 藤田学/学級委員 1

例1. CASEで条件分岐するパターン

s_no s_name reader_f
A001 佐藤花子/学級委員 1
A002 田中太郎/書記 2
A003 加藤一 0
A004 青木花 0
A005 藤田学/学級委員 1

このCASEでは、学級委員の名前に「/学級委員」をつけ、書記の名前に「/書記」をつけてSELECTしています。

これをCASEを使わずにWHERE句で条件分けしたとしたら結構面倒ですね。

例2. CASEで条件分岐をするパターン(式あり)

s_no s_name reader_f
A001 佐藤花子/学級委員(女子) 1
A002 田中太郎 2
A003 加藤一 0
A004 青木花 0
A005 藤田学/学級委員(男子) 1

ここでは「CASE式」で条件分岐しています。式が使えるので複雑な分岐に対応できます。ここでは2つの条件に合致したレコードにコメントをつけました。

男子の学級委員、女子の学級委員にコメントをつけてSELECTしました。

例3. CASEで大小比較するパターン

CASEでは大小比較ももちろんできます。ここではテストの点数で表示する記号をわけています。

例4. CASEでワイルドカードを使用するパターン

s_no s_name name_f
A001 佐藤花子
A002 田中太郎
A003 加藤一
A004 青木花
A005 藤田学

CASEではワイルドカードを使用してあいまい検索もできます。ここでは苗字が佐藤、加藤の人だけ〇、□をつけてSELECTしました。

例5. CASEで集計するパターン

m_cnt f_cnt
3 2

こちらはCASEで条件分岐して集計するパターンです。

男子・女子の人数をそれぞれ一度に集計しています。男なら1、女なら1を返し、1をSUMして集計しています。このようにすると条件に合致した件数を求めることができます。

where句でわけると複数のSQLに分かれて煩雑ですが、CASEなら一発です。

このCASEは「使えるテクニック」なのでおススメです。このCASEを使いこなすことができれば、脱初心者といってよいですね。

便利だけではなく、CASEが使えるとSQLのコード量が大幅に省略できて楽になります。

参照:問合せにおけるCASE式の使用 – Oracle Database 2日で開発者ガイド

以上、OracleのCASEの使い方とパターンでした。



フォローする

ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoinbitFlyer ビットコインを始めるなら安心・安全な取引所で