「SQL Server - 条件分岐」の版間の差分
提供: MochiuWiki : SUSE, EC, PCB
📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == SQL文でIF文を記述すれば、WHERE句の内容を変えて検索できるが、<br> 条件ごとに同じようなSQL文を複数記述するのは面…」 |
編集の要約なし |
||
| 2行目: | 2行目: | ||
SQL文でIF文を記述すれば、WHERE句の内容を変えて検索できるが、<br> | SQL文でIF文を記述すれば、WHERE句の内容を変えて検索できるが、<br> | ||
条件ごとに同じようなSQL文を複数記述するのは面倒なので、1行で分岐できるSQL文を記載する。<br> | 条件ごとに同じようなSQL文を複数記述するのは面倒なので、1行で分岐できるSQL文を記載する。<br> | ||
<br><br> | |||
== IIF文 == | |||
SQL Server 2012からIF文を1つにまとめたIIF文が使用できる。<br> | |||
評価の結果に基づいて、他の2つの引数のいずれかを返す。(ACCESSやVisual Basicでは馴染みの関数である)<br> | |||
<br> | |||
===== IIF文の構文 ===== | |||
IIF文の第1パラメータの式がtrueであれば、第2パラメータを返して、falseであれば第3パラメータを返す。<br> | |||
<source lang="sql"> | |||
--IIF文でscoreカラムが70以上であれば合格、70未満は不合格とする | |||
SELECT score,IIF(score >= 70, '合格', '不合格') res FROM table1; | |||
</source> | |||
<br><br> | <br><br> | ||
2020年3月10日 (火) 22:31時点における版
概要
SQL文でIF文を記述すれば、WHERE句の内容を変えて検索できるが、
条件ごとに同じようなSQL文を複数記述するのは面倒なので、1行で分岐できるSQL文を記載する。
IIF文
SQL Server 2012からIF文を1つにまとめたIIF文が使用できる。
評価の結果に基づいて、他の2つの引数のいずれかを返す。(ACCESSやVisual Basicでは馴染みの関数である)
IIF文の構文
IIF文の第1パラメータの式がtrueであれば、第2パラメータを返して、falseであれば第3パラメータを返す。
--IIF文でscoreカラムが70以上であれば合格、70未満は不合格とする
SELECT score,IIF(score >= 70, '合格', '不合格') res FROM table1;
CASE WHEN文で条件分岐
WHERE句の条件にCASE WHENを使用して、条件分岐を行う。
テーブルとデータの準備
まず、テーブルとその検索用データを作成する。
CREATE TABLE 社員マスタ
(
社員番号 INT,
氏名 VARCHAR(20),
部署 VARCHAR(20)
)
INSERT INTO 社員マスタ VALUES (1, '太郎さん', '営業部' )
INSERT INTO 社員マスタ VALUES (2, '次郎さん', '経理部' )
INSERT INTO 社員マスタ VALUES (3, '三郎さん', '人事部' )
INSERT INTO 社員マスタ VALUES (4, '四郎さん', '営業部' )
INSERT INTO 社員マスタ VALUES (5, '五郎さん', '経理部' )
INSERT INTO 社員マスタ VALUES (6, '六郎さん', '人事部' )
INSERT INTO 社員マスタ VALUES (7, '七郎さん', '営業部' )
INSERT INTO 社員マスタ VALUES (8, '八郎さん', '経理部' )
INSERT INTO 社員マスタ VALUES (9, '九郎さん', '人事部' )
条件を分岐させて検索
社員番号を指定せずに全件取得する場合と、社員番号を指定して1件のみに絞り込んだものを実行する。
; 全件検索
DECLARE @検索社員番号 int = NULL
SELECT
*
FROM
社員マスタ
WHERE
社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END
; 実行結果 社員番号 氏名 部署 1 太郎さん 営業部 2 次郎さん 経理部 3 三郎さん 人事部 4 四郎さん 営業部 5 五郎さん 経理部 6 六郎さん 人事部 7 七郎さん 営業部 8 八郎さん 経理部 9 九郎さん 人事部
; 社員番号を指定して取得
DECLARE @検索社員番号 int = 5
SELECT
*
FROM
社員マスタ
WHERE
社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END
; 実行結果 社員番号 氏名 部署 5 五郎さん 経理部
解説
"WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END"において、
CASE WHEN文を使用することで、条件が指定されてない(@検索社員番号がNULL)場合は、テーブルの値をそのまま使用し、
条件が指定された(@検索社員番号がNULL以外)の場合は、その指定された値で検索する。
SQL文を記述する量を少なくすることができる。