プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
SQLServer、count()で項目に対する集計を行うと値がNULLの行が除外されるらしい
言いたいことはすべてタイトルに書いてしまいましたけどね。
例えば

SELECT
    count(*)
FROM
    TBL1
;

と書く分には、気にする必要はないのですが

SELECT
    count(column1)
FROM
    TBL1
;

と書くと、column1がNullの行は集計されないのです。

SQLServerにおいては、count()で項目に対する集計を行うと
値がNULLの行が除外されるらしい。


これを意識しておかないと想定外の集計結果が出るのでご注意ください。

せっかくなので、もう少し具体的に書いておきましょう。

例えば、以下のような値が入ったテーブルtbl1があったとします。

column1column2
1a
2Null
3b


このテーブルに対して

SELECT
    count(*)
FROM
    TBL1
;

を実行すると、結果は「3」になります。

同じように

SELECT
    count(column1)
FROM
    TBL1
;

を実行すると、結果は「3」になります。

同じように

SELECT
    count(column2)
FROM
    TBL1
;

を実行すると……結果は「2」になります。
値がNullの行は集計対象から除外されちゃうのです。

どうしてもNullの行を集計対象に含めたい場合は

SELECT
    count(ISNULL(column2, ''))
FROM
    TBL1
;

のようにしてNull値を別の値に置き換えてから件数取得してください。
個人的には、設計を見直した方が良い気はしますけどね。

そんな感じ\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● SQLServer  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト