【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 |
---|---|---|
20240101 | 0 | スーパーに買い物に行く |
20240102 | 1 | 薬局に薬を買いに行く |
サンプル(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
;