Ответ на первоначальный вопрос:
Должен ли я размещать ISNULL внутри оператора CASE ...?
Нет, вы этого не сделаете. SUM()
игнорирует NULL
s. Поэтому наличие значений NULL не повлияет на результат суммирования. Исключение составляет то, что все значения имеют значение NULL или вообще не имеют каких-либо значений. В этом случае вы получите NULL
.
Должен ли я использовать инструкцию ELSE в CASE ..?
Нет, вы не по тем же причинам.
... Нужно ли мне использовать ISNULL()
вне CASE
..?
Это зависит от того, что вы ожидаете в результирующем в случае, когда все значения NULL
s или вы не имеете никаких значений. Если вы хотите иметь 0
или любое другое значение, используйте ISNULL()
или COALESCE()
. В противном случае нет.
Вот SQLFiddle демо
UPDATE
Учитывая выражение как один в своем измененном вопрос
SUM(CASE WHEN CODE = 'A' THEN UNIT + UNIT_1 END)
вы скорее всего хотите использовать ISNULL()
или COALESCE()
вокруг обоих UNIT
и UNIT_1
, если вы хотите лечить ab отправленное значение одного из этих столбцов как нулевые значения. В том случае, если вы хотите, чтобы получить ноль в результирующем, даже если нет значения, которые соответствуют вашему CASE
условию вы все еще нужно использовать ISNULL()
или COALESCE()
вокруг SUM()
.
SELECT ISNULL(SUM(CASE WHEN CODE = 'A'
THEN ISNULL(UNIT, 0) + ISNULL(UNIT_1, 0)
END), 0) AS UNIT_SUM
или
SELECT COALESCE(SUM(CASE WHEN CODE = 'A'
THEN COALESCE(UNIT, 0) + COALESCE(UNIT_1, 0)
END), 0) AS UNIT_SUM
Здесь SQLFiddle демонстрационный
Размещение 'isnull' снаружи может повлиять лишь на общий результат' суммы() '. –
когда случается, когда вы пытаетесь использовать возможности? –
с некоторым набором результатов, который я попробовал, и оба дают тот же результат. Потому что в будущей записи будет увеличено, что я смотрю на лучший подход. – Sukhjeevan