条件によって出力を変えるには?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はパフォーマンスに注意:条件分岐が多いとソート負荷が増えるため、インデックス設計も検討。
参考リンク

0 件のコメント:
コメントを投稿