2015.
04.
22
08:02:15
言いたいことはすべてタイトルに書いてしまいましたけどね。
例えば
と書く分には、気にする必要はないのですが
と書くと、column1がNullの行は集計されないのです。
SQLServerにおいては、count()で項目に対する集計を行うと
値がNULLの行が除外されるらしい。
これを意識しておかないと想定外の集計結果が出るのでご注意ください。
せっかくなので、もう少し具体的に書いておきましょう。
例えば、以下のような値が入ったテーブルtbl1があったとします。
このテーブルに対して
を実行すると、結果は「3」になります。
同じように
を実行すると、結果は「3」になります。
同じように
を実行すると……結果は「2」になります。
値がNullの行は集計対象から除外されちゃうのです。
どうしてもNullの行を集計対象に含めたい場合は
のようにしてNull値を別の値に置き換えてから件数取得してください。
個人的には、設計を見直した方が良い気はしますけどね。
そんな感じ\(--)/
例えば
SELECT
count(*)
FROM
TBL1
;
count(*)
FROM
TBL1
;
と書く分には、気にする必要はないのですが
SELECT
count(column1)
FROM
TBL1
;
count(column1)
FROM
TBL1
;
と書くと、column1がNullの行は集計されないのです。
SQLServerにおいては、count()で項目に対する集計を行うと
値がNULLの行が除外されるらしい。
これを意識しておかないと想定外の集計結果が出るのでご注意ください。
せっかくなので、もう少し具体的に書いておきましょう。
例えば、以下のような値が入ったテーブルtbl1があったとします。
column1 | column2 |
---|---|
1 | a |
2 | Null |
3 | b |
このテーブルに対して
SELECT
count(*)
FROM
TBL1
;
count(*)
FROM
TBL1
;
を実行すると、結果は「3」になります。
同じように
SELECT
count(column1)
FROM
TBL1
;
count(column1)
FROM
TBL1
;
を実行すると、結果は「3」になります。
同じように
SELECT
count(column2)
FROM
TBL1
;
count(column2)
FROM
TBL1
;
を実行すると……結果は「2」になります。
値がNullの行は集計対象から除外されちゃうのです。
どうしてもNullの行を集計対象に含めたい場合は
SELECT
count(ISNULL(column2, ''))
FROM
TBL1
;
count(ISNULL(column2, ''))
FROM
TBL1
;
のようにしてNull値を別の値に置き換えてから件数取得してください。
個人的には、設計を見直した方が良い気はしますけどね。
そんな感じ\(--)/
category:● SQLServer thema:システム開発 - genre:コンピュータ Posted by ササキマコト