📢 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文で条件分岐 ==
WHERE句の条件にCASE WHENを使用して、条件分岐を行う。<br>
<code>WHERE</code>句の条件に<code>CASE WHEN</code>を使用して、条件分岐を行う。<br>
<br>
<br>
===== テーブルとデータの準備 =====
===== テーブルとデータの準備 =====
まず、テーブルとその検索用データを作成する。<br>
まず、テーブルとその検索用データを作成する。<br>
  <source lang="sql">
  <syntaxhighlight lang="sql">
  CREATE TABLE 社員マスタ
  CREATE TABLE 社員マスタ
  (
  (
238行目: 293行目:
     部署      VARCHAR(20)
     部署      VARCHAR(20)
  )
  )
  </source>
  </syntaxhighlight>
<br>
<br>
  <source lang="sql">
  <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, '九郎さん', '人事部' )  
  </source>
  </syntaxhighlight>
<br>
<br>
===== 条件を分岐させて検索 =====
===== 条件を分岐させて検索 =====
社員番号を指定せずに全件取得する場合と、社員番号を指定して1件のみに絞り込んだものを実行する。<br>
社員番号を指定せずに全件取得する場合と、社員番号を指定して1件のみに絞り込んだものを実行する。<br>
  <source lang="sql">
  <syntaxhighlight lang="sql">
  ; 全件検索
  -- 全件検索
   
   
  DECLARE @検索社員番号 int = NULL
  DECLARE @検索社員番号 int = NULL
263行目: 318行目:
     社員マスタ
     社員マスタ
  WHERE
  WHERE
     社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END
     社員番号 = CASE WHEN @検索社員番号 IS NULL THEN 社員番号 ELSE @検索社員番号 END
  </source>
  </syntaxhighlight>
<br>
<br>
  ; 実行結果
  実行結果
   
   
  社員番号 氏名 部署
  社員番号 氏名 部署
279行目: 334行目:
  9 九郎さん 人事部
  9 九郎さん 人事部
<br>
<br>
  <source lang="sql">
  <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
  </source>
  </syntaxhighlight>
<br>
<br>
  ; 実行結果
  実行結果
  社員番号 氏名 部署
  社員番号 氏名 部署
  5 五郎さん 経理部
  5 五郎さん 経理部
<br>
<br>
===== 解説 =====
===== 解説 =====
"WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN  社員番号 ELSE @検索社員番号 END"において、<br>
<code>WHERE 社員番号 = CASE WHEN @検索社員番号 IS NULL THEN  社員番号 ELSE @検索社員番号 END</code>において、<br>
CASE WHEN文を使用することで、条件が指定されてない(@検索社員番号がNULL)場合は、テーブルの値をそのまま使用し、<br>
<code>CASE WHEN</code>文を使用することで、条件が指定されてない(@検索社員番号がNULL)場合は、テーブルの値をそのまま使用し、<br>
条件が指定された(@検索社員番号がNULL以外)の場合は、その指定された値で検索する。<br>
条件が指定された(@検索社員番号がNULL以外)の場合は、その指定された値で検索する。<br>
<br>
<br>