【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
;