Лучшая практика для подсчета значений, которые содержат значения NULL - PullRequest
1 голос
/ 17 августа 2011

Мне интересно, если лучший способ подсчитать список значений, который содержит значения NULL, это сделать следующее?

COUNT(ISNLL(Date),'')

Я спрашиваю, потому что у меня есть цикл while, который запускается, только если count> 0. ОНО похоже, что это работает, но правильно ли это? Вот мой код:

WHILE SELECT(Count(*)
             FROM 
              (SELECT 1 AS a
                   FROM dbo.tblrecords r
                   LEFT JOIN dbo.tblError e
                GROUP BY r.RecordId, r.MissingCount
                HAVING r.MissingCount > COUNT(DISTINCT(ISNULL(e.[ErrorDate],''))) > 0

Если e.ErrorDate имеет значение NULL, я не хочу, чтобы он считал это.

Ответы [ 3 ]

2 голосов
/ 17 августа 2011

просто добавьте WHERE e.ErrorDate is not null к вашему запросу

1 голос
/ 17 августа 2011

Агрегатные функции (COUNT, SUM, ETC) удаляют нули, поэтому, если вы хотите, чтобы они были подсчитаны, вы можете либо COUNT(*), который будет считать записи, а не отдельные значения, или делать то, что вы делаете ISNULL / COALESCE для замены нулевых значений.

Если вы хотите посчитать только нулевые значения, сделайте подсчет (*), где значение IS NOT NULL, как предложил @Derek Kromm.

FWIW, я не думаю, что DISTINCT необходим, так как он может сбить ваш счет, если у вас есть несколько нулей, которые вы хотите считать как более одного.

0 голосов
/ 17 августа 2011

WHILE (ВЫБЕРИТЕ СЧЕТЧИК (*) ИЗ НЕКОТОРЫХ, ГДЕ НЕОБХОДИМЫХ ПОЛЕЙ НУЛЬ)> 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...