SQLServerでのCASEの使い方とは?UPDATE文でもCASEが使える

- システム
エンジニア - SQLServerでCASEはどのような場合に使えますか。
- プロジェクト
マネージャー - CASEはSQLServerで条件分岐をする場合に使用します。CASEはSELECT文やUPDATE文でも使用できます。
SQLServerでのCASEの使い方とは?
今回は、SQLServerでのCASEの使い方について説明します。SQLServerで条件分岐をするには、CASEを使用します。
SELECT文でもUPDATE文でも、CASEを使用できます。
SQLServerでのCASEの使い方に興味のある方はぜひご覧ください。
値で条件分岐
SQLServerでは、CASEで条件分岐できます。
値で条件分岐する方法を紹介します。
ここでは、table_1テーブルが以下の状態だとします。
1 2 3 4 5 6 7 |
id last_name first_name gender score memo -------------------- ---------- ---------- ---------- -------------------- ------ 1 taro tanaka male 50 NULL 2 hanako yamada female 90 NULL 3 ichiro suzuki male 70 NULL 4 takako takahashi female 95 NULL 5 jiro sato male 30 NULL |
実際のSQL文を見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
-- 値で条件分岐 SELECT id, last_name, first_name, gender, CASE gender WHEN 'male' then 'Mr.' + first_name WHEN 'female' then 'Ms.' + first_name ELSE first_name END result FROM table_1; go |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
id last_name first_name gender result -------------------- ---------- ---------- ---------- ------------- 1 taro tanaka male Mr.tanaka 2 hanako yamada female Ms.yamada 3 ichiro suzuki male Mr.suzuki 4 takako takahashi female Ms.takahashi 5 jiro sato male Mr.sato |
このように、SQLServerでは値で条件分岐できます。
条件式で分岐
SQLServerで、条件式で分岐する方法を紹介します。
実際のSQL文を見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
-- 式で条件分岐 SELECT id, last_name, first_name, gender, CASE WHEN gender = 'male' AND first_name = 'tanaka' then 'He is tanaka' WHEN gender = 'female' AND first_name = 'yamada' then 'She is yamada' ELSE 'others' END result FROM table_1; go |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
id last_name first_name gender result -------------------- ---------- ---------- ---------- ------------- 1 taro tanaka male He is tanaka 2 hanako yamada female She is yamada 3 ichiro suzuki male others 4 takako takahashi female others 5 jiro sato male others |
条件式はANDでつなげることもできます。
このように、SQLServerでは条件式で分岐できます。
大小比較
SQLServerでは、CASEで大小比較ができます。
実際のSQL文を見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
-- 90点以上→A,70点以上→B,以外→C SELECT id, last_name, first_name, score, CASE WHEN score >= 90 THEN 'Great!' WHEN score < 90 AND score >= 70 THEN 'Good' ELSE 'Not good' END result FROM table_1; go |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
id last_name first_name score result -------------------- ---------- ---------- -------------------- ------ 1 taro tanaka 50 Not good 2 hanako yamada 90 Great! 3 ichiro suzuki 70 Good 4 takako takahashi 95 Great! 5 jiro sato 30 Not good |
このように、SQLServerではCASEで大小比較ができます。
集計
SQLServerでは、CASEで集計ができます。
実際のSQL文を見てみましょう。
1 2 3 4 5 6 |
-- 男女の数を集計 SELECT SUM(CASE WHEN gender = 'male' THEN 1 ELSE 0 END) male, SUM(CASE WHEN gender = 'female' THEN 1 ELSE 0 END) female FROM table_1; go |
実行結果は以下のようになります。
1 2 3 |
male female ----------- ----------- 3 2 |
このように、SQLServerではCASEで集計ができます。
ワイルドカード
SQLServerでは、CASEでワイルドカードが使えます。
実際のSQL文を見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
-- 式で条件分岐 SELECT id, last_name, first_name, gender, CASE WHEN first_name LIKE 'ta%' then 'ta%' WHEN first_name LIKE 'ya%' then 'ya%' ELSE 'others' END result FROM table_1; go |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
id last_name first_name gender result -------------------- ---------- ---------- ---------- ------ 1 taro tanaka male ta% 2 hanako yamada female ya% 3 ichiro suzuki male others 4 takako takahashi female ta% 5 jiro sato male others |
UPDATE
SQLServerでは、UPDATE文でもCASEが使えます。
実際のSQL文を見てみましょう。
1 2 3 4 5 6 7 8 |
-- 90点以上の人のメモを更新 UPDATE table_1 SET memo = CASE WHEN score >= 90 THEN 'great!' END; SELECT * FROM table_1; go |
実行結果は以下のようになります。
1 2 3 4 5 6 7 |
id last_name first_name gender score memo -------------------- ---------- ---------- ---------- -------------------- ---------- 1 taro tanaka male 50 NULL 2 hanako yamada female 90 great! 3 ichiro suzuki male 70 NULL 4 takako takahashi female 95 great! 5 jiro sato male 30 NULL |
このように、SQLServerではUPDATE文でもCASEが使えます。
- システム
エンジニア - 条件分岐のほか、大小比較や集計にも使えるのですね。
- プロジェクト
マネージャー - その通りです。SQLServerではCASEを使う場面が多いので、しっかり理解してください。
まとめ
SQLServerでのCASEの使い方について説明しました。SQLServerでは、条件分岐をするにはCASEを使用します。
SELECT文でもUPDATE文でもCASEを使用できます。
ぜひご自身でSQL文を書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


SQLServer新着案件New Job
蔦屋書新店オープンに関するアプリ開発/Oracle/東京都渋谷区/【WEB面談可】/在宅勤務
月給56万~59万円東京都渋谷区(神泉駅)資産運用会社向け残高管理システム運用保守/SQLServer/東京都中央区/【WEB面談可】
月給50万~60万円東京都中央区(銀座駅)資産運用会社向け残高管理システム開発のテスター/SQLServer/東京都中央区/【WEB面談可】
月給25万~35万円東京都中央区(銀座駅)放射線部門システムパッケージの運用保守/Oracle/東京都港区/【WEB面談可】
月給50万~60万円東京都港区(品川駅)放射線部門システムパッケージの開発のテスター/Oracle/東京都港区/【WEB面談可】
月給25万~35万円東京都港区(品川駅)営業フロントシステム運用保守/ASP.NET/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(木場駅)