【SQL Server】CASE式でNULL判定をする方法

最終更新日

テーブル内のレコードを集計して、レコードが無い場合はカラムにNULLがセットされてくるので、CASE式を利用してNULLの場合は0をセット、それ以外の場合はカラム+1をしてカウントアップするSQLを組むときなどに重宝します。

This is useful for building up SQL statements that aggregate records in a table and count them up by using a CASE expression to set 0 if they are null and + 1 if they are not.

NULL判定方法(NULL determination method)

開発現場では一般的に主キーを作成する関数(プロシージャ)を作成するか「auto increment」を使用したりしますが、たまに作成するテーブルを集計して、主キーを作成するケースがあります。また、今回の例ではISNULL関数は使えません。

CASE WHENでNULLの判定は、「CASE WHEN 項目名 IS NULL」と記述します。

SQLでは項目名 = NULLと記述しません。VBやC#、JAVAなどの言語とは指定方法が異なります。
SQL does not write item-name = NULL. This is different from languages such as VB, C #, and JAVA.

In development, you typically create a function (procedure) or use “auto increment” to create a primary key, but occasionally you aggregate a table to create a primary key. Also, the ISNULL function is not allowed in this example.

For a case that is NULL, write CASE WHEN item-name IS NULL.

環境(Environment)

テーブル名:メモテーブル(table names: note tables)

日付と連番の復号キー構成(Date and Sequence Decryption Key Configuration)

日付(主キー)
Date (primary key)
連番(主キー)
Serial number (primary key)
メモ
Notes
202401010スーパーに買い物に行く
202401021薬局に薬を買いに行く

サンプル(Sample)

メモテーブルにレコードが1件も存在しない場合は、連番に0をセットする。1件以上登録されている場合は、連番+1を返す。

If there are no records in the notes table, set the sequence number to 0. If more than one item has been registered, the sequential number + 1 is returned.

SELECT
    CASE WHEN WORK.連番 IS null THEN 0 ELSE WORK.連番 + 1 END
FROM(
    SELECT 
        MAX(連番) AS 連番 ,
        convert(varChar,current_timestamp,112) AS 日付 
    FROM  メモテーブル
    WHERE 日付 = convert(varChar,current_timestamp,112)
) AS WORK
;

すなりん

サイトの管理者「すなりん」です。現役のシステムエンジニアをしてます。要件定義からテスト、プロジェクトマネージャー、顧客調整、社内インフラなんでもこなします。いわゆるフルスタック・エンジニアです。 仕事柄色んな技術や製品を扱うことが多く、なかなか覚えているもの大変ですし、しばらくすると忘れてしまうことが多いので、自分なりの形で技術情報やIT関係の情報を掲載しています。 個人で仕事の合間をみながら記事の投稿やサイトを更新していますので、誤字や間違った内容があったりもしますので、閲覧者はご理解の上ご利用ください。