2

MSDNによると、DISTINCTも使用されていない限り、TSQL COUNT(*)関数の結果にはNULL値が含まれます(ソース:http://msdn.microsoft.com/en-us/library/ms175997.aspx) 。

ただし、私のクエリではNULL値は無視されています。これをテストするために、小さなテーブルを作成し、いくつかのデータを入力しました。

CREATE TABLE tbl (colA varchar(1), colB varchar(10))
INSERT tbl VALUES
('Y', 'test1'),
('Y', 'test2'),
(null, 'test3'),
(null, 'test4'),
('N', 'test5')

次に、次の2つのクエリを実行しました。

SELECT count(*) FROM tbl
WHERE colA <> 'N'

SELECT DISTINCT colA FROM tbl
WHERE colA <> 'N'

どちらの結果もNULL値を無視します。結果としてそれぞれ2と「Y」が得られます。なぜこれが起こっているのか途方に暮れています。誰かが私を手がかりにしてくれませんか?

SQL Fiddleでシミュレートされた結果:http ://sqlfiddle.com/#!3 / 8f00b / 9

4

6 に答える 6

5

ヌルは奇妙です。

null <> 'N'に評価されfalseます。
null = 'N'また、に評価されfalseます。

nullを明示的に処理する必要があります。

SELECT count(*) FROM tbl
WHERE (colA <> 'N') or (colA is null)
于 2012-09-10T22:14:36.680 に答える
2

ISNULL以外のNullとの比較は失敗します。したがって、Null='N'とNull<>'N'の両方がfalseを返します。

nullを含める場合は、次のように言う必要があります

WHERE colA <> 'N' or colA IS NULL
于 2012-09-10T22:15:02.453 に答える
2

不明であるためNULL、サーバーはその値を認識していません。しかし、使用してみてくださいIS NULL

SELECT count(*) 
FROM tbl
WHERE colA <> 'N' or  
      colA IS NULL

SQLFiddleデモ

于 2012-09-10T22:15:44.940 に答える
2
declare @tbl as Table (colA varchar(1), colB varchar(10)) 
insert @tbl values 
  ('Y', 'test1'), ('Y', 'test2'), (null, 'test3'), (null, 'test4'), ('N', 'test5')
select * from @tbl

select
  count(*) as 'Rows', -- All rows.
  count(colA) as [colA Values], -- Rows where   colA   is not NULL.
  count(colB) as [colB Values],  -- Rows where   colB   is not NULL.
  count(distinct colA) as [Distinct colA], -- Number of distinct values in   colA .
  count(distinct colB) as [Distinct colB], -- Number of distinct values in   colB .
  -- NULL never equals anything, including another NULL.
  case when 42 = NULL then 'Yes' else 'Unknown' end as [Answer Is NULL?],
  case when NULL = NULL then 'Yes' else 'Unknown' end as [NULL = NULL],
  -- Use   is NULL   to explicitly check for   NULL .
  case when NULL is NULL then 'Yes' else 'Unknown' end as [NULL is NULL]
  from @tbl
于 2012-09-10T23:23:55.063 に答える
2
 select count(IsNull(colA,'')) as colA, count(colB) as colB from @tbl

トリックもする必要があります

于 2013-03-02T13:34:04.723 に答える
1

ISNULL次の機能も使用できます。

SELECT count(*) 
FROM tbl
WHERE isnull(colA,'F') <> 'N' 

MSDN: http: //msdn.microsoft.com/en-us/library/aa933210 (v=sql.80).aspx

于 2012-09-11T11:34:27.757 に答える