📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 224行目: | 224行目: | ||
SELECT score,IIF(score >= 70, '合格', '不合格') res FROM table1; | SELECT score,IIF(score >= 70, '合格', '不合格') res FROM table1; | ||
</source> | </source> | ||
<br><br> | |||
== CASE文 == | |||
CASE文を使用して、条件の判定ができる。<br> | |||
<br> | |||
8行目は変数に値を代入して、14行目で変数の値を出力している。<br> | |||
<syntaxhighlight lang="sql"> | |||
CREATE PROCEDURE dbo.T_TEST | |||
AS | |||
BEGIN | |||
DECLARE @num1 INT | |||
DECLARE @msg1 VARCHAR(20) | |||
SET @num1 = 1 | |||
SET @msg1 = CASE @num1 | |||
WHEN 0 THEN '0です' | |||
WHEN 1 THEN '1です' | |||
ELSE 'その他' | |||
END | |||
PRINT @msg1 --"1です"が出力される | |||
END | |||
</syntaxhighlight> | |||
<br><br> | |||
== NULLとの比較 == | |||
以下の例では、NULL値と比較している。<br> | |||
<br> | |||
10行目は、<code>IS NULL</code>句を使用して、変数の値がNULLかどうかを確認している。<br> | |||
17行目は、<code>IS NOT NULL</code>句を使用して、変数の値がNULLかどうかを確認している。<br> | |||
<syntaxhighlight lang="sql"> | |||
CREATE PROCEDURE dbo.T_TEST | |||
AS | |||
BEGIN | |||
DECLARE @str1 VARCHAR(20) | |||
DECLARE @str2 VARCHAR(20) | |||
DECLARE @msg1 VARCHAR(20) | |||
SET @str1 = NULL | |||
SET @str2 = 'TEST' | |||
IF (@str1 IS NULL) | |||
BEGIN | |||
SET @msg1 = 'NULLである' | |||
END | |||
PRINT @msg1 -- NULLである | |||
IF (@str2 IS NOT NULL) | |||
BEGIN | |||
SET @msg1 = 'NULLでない' | |||
END | |||
PRINT @msg1 -- NULLでない | |||
END | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
== CASE WHEN文で条件分岐 == | == CASE WHEN文で条件分岐 == | ||
<code>WHERE</code>句の条件に<code>CASE WHEN</code>を使用して、条件分岐を行う。<br> | |||
<br> | <br> | ||
===== テーブルとデータの準備 ===== | ===== テーブルとデータの準備 ===== | ||
まず、テーブルとその検索用データを作成する。<br> | まず、テーブルとその検索用データを作成する。<br> | ||
< | <syntaxhighlight lang="sql"> | ||
CREATE TABLE 社員マスタ | CREATE TABLE 社員マスタ | ||
( | ( | ||
| 238行目: | 293行目: | ||
部署 VARCHAR(20) | 部署 VARCHAR(20) | ||
) | ) | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sql"> | ||
INSERT INTO 社員マスタ VALUES (1, '太郎さん', '営業部' ) | INSERT INTO 社員マスタ VALUES (1, '太郎さん', '営業部' ) | ||
INSERT INTO 社員マスタ VALUES (2, '次郎さん', '経理部' ) | INSERT INTO 社員マスタ VALUES (2, '次郎さん', '経理部' ) | ||
| 250行目: | 305行目: | ||
INSERT INTO 社員マスタ VALUES (8, '八郎さん', '経理部' ) | INSERT INTO 社員マスタ VALUES (8, '八郎さん', '経理部' ) | ||
INSERT INTO 社員マスタ VALUES (9, '九郎さん', '人事部' ) | INSERT INTO 社員マスタ VALUES (9, '九郎さん', '人事部' ) | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
===== 条件を分岐させて検索 ===== | ===== 条件を分岐させて検索 ===== | ||
社員番号を指定せずに全件取得する場合と、社員番号を指定して1件のみに絞り込んだものを実行する。<br> | 社員番号を指定せずに全件取得する場合と、社員番号を指定して1件のみに絞り込んだものを実行する。<br> | ||
< | <syntaxhighlight lang="sql"> | ||
-- 全件検索 | |||
DECLARE @検索社員番号 int = NULL | DECLARE @検索社員番号 int = NULL | ||
| 263行目: | 318行目: | ||
社員マスタ | 社員マスタ | ||
WHERE | WHERE | ||
社員番号 = CASE WHEN @検索社員番号 IS NULL THEN | 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
実行結果 | |||
社員番号 氏名 部署 | 社員番号 氏名 部署 | ||
| 279行目: | 334行目: | ||
9 九郎さん 人事部 | 9 九郎さん 人事部 | ||
<br> | <br> | ||
< | <syntaxhighlight lang="sql"> | ||
-- 社員番号を指定して取得 | |||
DECLARE @検索社員番号 int = 5 | DECLARE @検索社員番号 int = 5 | ||
| 289行目: | 344行目: | ||
WHERE | WHERE | ||
社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END | 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END | ||
</ | </syntaxhighlight> | ||
<br> | <br> | ||
実行結果 | |||
社員番号 氏名 部署 | 社員番号 氏名 部署 | ||
5 五郎さん 経理部 | 5 五郎さん 経理部 | ||
<br> | <br> | ||
===== 解説 ===== | ===== 解説 ===== | ||
<code>WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END</code>において、<br> | |||
CASE | <code>CASE WHEN</code>文を使用することで、条件が指定されてない(@検索社員番号がNULL)場合は、テーブルの値をそのまま使用し、<br> | ||
条件が指定された(@検索社員番号がNULL以外)の場合は、その指定された値で検索する。<br> | 条件が指定された(@検索社員番号がNULL以外)の場合は、その指定された値で検索する。<br> | ||
<br> | <br> | ||