SQL ServerのCASE文は、条件に応じて異なる値を返すことができる便利な構文です。データを分類したり、条件によって値を変更したりする際によく使われます。
例えば、数値のスコアをA・B・Cのランクに変換したり、特定の条件を満たすデータにラベルを付与したりする場合に役立ちます。また、SELECT文の中だけでなく、WHERE句やORDER BY句、集計関数と組み合わせて使用することも可能です。
本記事では、CASE文の基本的な使い方から、実践的な活用方法までをわかりやすく解説します。これを理解すれば、SQL Serverでのデータ操作の幅が大きく広がるでしょう!
CASE文の基本構文
SQL ServerのCASE文は、条件に応じて異なる値を返すことができる制御構文です。IF文のような分岐処理をSQLの中で行うことができ、特にデータの分類や条件付きの計算をする際に役立ちます。
CASE文には、「単純CASE式」 と 「検索CASE式」 の2種類があります。それぞれの基本構文と使い方を見ていきましょう。
CASE文の基本構文
CASE文の基本的な構文は以下のようになります。
検索CASE式(条件による分岐)
SELECT column_name,
CASE
WHEN 条件1 THEN 値1
WHEN 条件2 THEN 値2
ELSE 値3
END AS alias_name
FROM table_name;
使用例:学生のスコアをランク付けする
SELECT student_name, score,
CASE
WHEN score >= 80 THEN 'A'
WHEN score >= 60 THEN 'B'
ELSE 'C'
END AS rank
FROM students;
このSQLでは、スコアが80以上なら’A’、60以上なら’B’、それ以外は’C’というランクを付けています。
単純CASE式(値による分岐)
SELECT column_name,
CASE column_name
WHEN 値1 THEN 変換後の値1
WHEN 値2 THEN 変換後の値2
ELSE 変換後の値3
END AS alias_name
FROM table_name;
使用例:カテゴリIDをカテゴリ名に変換する
SELECT product_name, category_id,
CASE category_id
WHEN 1 THEN 'Electronics'
WHEN 2 THEN 'Clothing'
ELSE 'Others'
END AS category_name
FROM products;
このように、カテゴリIDを見やすいカテゴリ名に変換できます。
ELSE句の役割
CASE文では、すべての条件に当てはまらなかった場合のデフォルト値としてELSE句を指定できます。
ELSEを省略した場合、一致する条件がなければNULLが返される点に注意しましょう。
SELECT employee_name, department_id,
CASE department_id
WHEN 1 THEN 'Sales'
WHEN 2 THEN 'HR'
ELSE 'Other Department'
END AS department_name
FROM employees;
こうすることで、department_id
が 1 または 2 でない場合も “Other Department” という値を返すことができます。
CASE文の応用例
CASE文は、単純な条件分岐だけでなく、さまざまな場面で応用できます。ここでは、実際の業務でも役立ついくつかの応用パターンを紹介します。
NULL値の置き換え
テーブルのデータにNULLが含まれている場合、そのまま表示すると見づらくなることがあります。CASE文を使えば、NULLを特定の値に置き換えることが可能です。
使用例:NULLの年齢データを「Unknown」に置き換える
SELECT name,
CASE
WHEN age IS NULL THEN 'Unknown'
ELSE CAST(age AS VARCHAR)
END AS age_display
FROM users;
このSQLでは、age
がNULLの場合は “Unknown” と表示し、それ以外は数値を文字列としてそのまま表示します。
条件に応じた列の選択
CASE文を使うことで、1つのカラムの値に応じて異なるカラムを選択することができます。
使用例:注文の種類(オンライン/店舗)によって異なる価格を表示する
SELECT order_id,
CASE
WHEN order_type = 'online' THEN online_price
ELSE store_price
END AS final_price
FROM orders;
このSQLでは、注文がオンラインの場合は online_price
を、それ以外(店舗購入)は store_price
を表示します。
条件に応じたデータのグルーピング
CASE文は集計関数(SUM, COUNT, AVGなど)と組み合わせることで、条件別の集計を簡単に行うことができます。
使用例:注文のステータスごとの売上集計
SELECT
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_total,
SUM(CASE WHEN status = 'pending' THEN amount ELSE 0 END) AS pending_total
FROM payments;
このSQLでは、status
が “completed” の場合の売上合計と、”pending” の場合の売上合計をそれぞれ集計しています。
まとめ
本記事では、SQL ServerにおけるCASE文の使い方について詳しく解説しました。CASE文を活用することで、SQLの中で条件分岐を行い、データの変換や分類、集計が柔軟にできるようになります。
おさらい
✅ CASE文の基本構文
✅ 集計関数との組み合わせ
✅ NULL値の処理やデータのグルーピングなどの応用例
CASE文は、レポート作成やデータの前処理において特に便利な機能です。基本的な使い方をマスターすれば、より高度なSQLクエリを作成できるようになります。ぜひ、実際のデータ操作に役立ててみてください!
コメント