【SQLServer】CASE文の使い方を徹底解説!

スポンサーリンク

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クエリを作成できるようになります。ぜひ、実際のデータ操作に役立ててみてください!

コメント