2025年11月25日火曜日

SQL Server CASE式の使い方と実務例|SELECT・ORDER BYで条件分岐を行う方法

条件によって出力を変えるには?SQL ServerのCASE式の基本と実務活用を解説

SQL Serverでは、クエリ内で条件に応じて出力内容を切り替えることができます。
そのときに使うのがCASE式です。
IF文のように条件分岐を行えるため、SELECT句・ORDER BY句などで柔軟な表示や並び替えが可能です。
この記事では、CASE式の構文、2種類のCASE(Simple/Searched)の違い、実務での応用例を初心者向けにわかりやすく解説します。

目次

CASE式とは?SQLで条件分岐を行う構文

CASE式の基本

CASE式は、条件に応じて異なる値を返すSQL構文です。
プログラミング言語でいう「if〜else〜end if」に相当し、SQLの中で柔軟なロジックを組み込むことができます。


CASE 
    WHEN 条件式 THEN 値1
    WHEN 条件式 THEN 値2
    ELSE 値3
END

CASE式はSQL文のどこでも使えますが、特に次の箇所でよく登場します:

  • SELECT句:条件ごとに出力列の内容を変える
  • ORDER BY句:並び順を条件で切り替える
  • GROUP BY句/HAVING句:集計条件を分岐させる

Simple CASE式の構文と使い方

Simple CASE式の構文

Simple CASEは、1つの式を基準に複数の値を比較します。


CASE 式
    WHEN 値1 THEN 結果1
    WHEN 値2 THEN 結果2
    ELSE デフォルト結果
END

使用例:ステータスコードを文字に変換


SELECT 
    OrderID,
    CASE Status
        WHEN 0 THEN '未処理'
        WHEN 1 THEN '処理中'
        WHEN 2 THEN '完了'
        ELSE '不明'
    END AS StatusName
FROM Orders;

同じ列(ここでは Status)を基準に分岐させたい場合は、Simple CASEが最適です。

Searched CASE式の構文と使い方

Searched CASE式の構文

Searched CASEは、各 WHEN に条件式を個別に指定できるタイプです。


CASE
    WHEN 条件1 THEN 結果1
    WHEN 条件2 THEN 結果2
    ELSE デフォルト結果
END

使用例:売上金額に応じてランクを付与


SELECT 
    CustomerName,
    CASE 
        WHEN TotalSales >= 100000 THEN 'ゴールド'
        WHEN TotalSales >= 50000 THEN 'シルバー'
        ELSE 'ブロンズ'
    END AS Rank
FROM Customers;

複雑な条件分岐や数値範囲を扱う場合は、Searched CASEを使うのが一般的です。

SELECT句・ORDER BY句での実務活用例

① SELECT句で条件表示を切り替える

例:NULLや空文字を「未入力」として表示したい場合


SELECT 
    EmployeeName,
    CASE 
        WHEN Phone IS NULL OR Phone = '' THEN '未入力'
        ELSE Phone
    END AS DisplayPhone
FROM Employees;

② ORDER BY句で並び順を条件分岐

CASEは並び替えでも使用可能です。特定条件を優先的に上位に並べたいときに便利です。


SELECT OrderID, Status
FROM Orders
ORDER BY 
    CASE 
        WHEN Status = '遅延' THEN 0
        WHEN Status = '通常' THEN 1
        ELSE 2
    END;

この例では、「遅延」が最上位、「通常」が中間、それ以外が下位に並びます。

③ 集計とCASEの組み合わせ

集計関数と組み合わせることで、条件別のカウントを簡潔に行えます。


SELECT 
    SUM(CASE WHEN Status = '完了' THEN 1 ELSE 0 END) AS 完了件数,
    SUM(CASE WHEN Status = '未処理' THEN 1 ELSE 0 END) AS 未処理件数
FROM Orders;

このようにCASEは単なる分岐だけでなく、柔軟な集計条件にも活用できます。

CASE式を使う際の注意点とベストプラクティス

  • データ型の整合性に注意:各 THEN/ELSE の戻り値は同じ型に統一しましょう。
  • NULL判定を明示的に:「= NULL」ではなく「IS NULL」で判定。
  • 複雑すぎるCASEはビューや関数化を検討:ロジックが長くなる場合はメンテナンス性を優先。
  • ORDER BY内のCASEはパフォーマンスに注意:条件分岐が多いとソート負荷が増えるため、インデックス設計も検討。

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿