SQLServerでのCASEの使い方とは?UPDATE文でもCASEが使える
- SE
- SQLServerでCASEはどのような場合に使えますか。
- PM
- 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が使えます。
- SE
- 条件分岐のほか、大小比較や集計にも使えるのですね。
- PM
- その通りです。SQLServerではCASEを使う場面が多いので、しっかり理解してください。
まとめ
SQLServerでのCASEの使い方について説明しました。SQLServerでは、条件分岐をするにはCASEを使用します。
SELECT文でもUPDATE文でもCASEを使用できます。
ぜひご自身でSQL文を書いて、理解を深めてください。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新:
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
開発エンジニア/東京都品川区/【WEB面談可】/在宅ワーク
月給29万~30万円東京都品川区(大崎駅) -
遠隔テストサービス機能改修/JavaScript/東京都港区/【WEB面談可】/テレワーク
月給45万~60万円東京都港区(六本木駅) -
病院内システムの不具合対応、保守/東京都豊島区/【WEB面談可】/テレワーク
月給30万~30万円東京都豊島区(池袋駅) -
開発/JavaScript/東京都豊島区/【WEB面談可】/テレワーク
月給50万~50万円東京都豊島区(大塚駅) -
債権債務システム追加開発/東京都文京区/【WEB面談可】/在宅勤務
月給62万~67万円東京都文京区(後楽園駅)