Я разработал запрос, и в результатах для первых трех столбцов я получаю NULL
. Как я могу заменить его 0
?
Select c.rundate,
sum(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
sum(case when c.runstatus = 'Failed' then 1 end) as Failed,
sum(case when c.runstatus = 'Cancelled' then 1 end) as Cancelled,
count(*) as Totalrun from
( Select a.name,case when b.run_status=0 Then 'Failed' when b.run_status=1 Then 'Succeeded'
when b.run_status=2 Then 'Retry' Else 'Cancelled' End as Runstatus,
---cast(run_date as datetime)
cast(substring(convert(varchar(8),run_date),1,4)+'/'+substring(convert(varchar(8),run_date),5,2)+'/' +substring(convert(varchar(8),run_date),7,2) as Datetime) as RunDate
from msdb.dbo.sysjobs as a(nolock) inner join msdb.dbo.sysjobhistory as b(nolock)
on a.job_id=b.job_id
where a.name='AI'
and b.step_id=0) as c
group by
c.rundate
sql
sql-server
Бхаскар Мишра
источник
источник
Ответы:
Если вы хотите заменить возможно
null
столбец чем-то другим, используйте IsNull .Это поместит 0 в myColumn, если он нулевой во-первых.
источник
Вы можете использовать оба этих метода, но есть различия:
Сравнение COALESCE () и ISNULL ():
Функция ISNULL и выражение COALESCE имеют сходную цель, но могут вести себя по-разному.
Поскольку ISNULL является функцией, она оценивается только один раз. Как описано выше, входные значения для выражения COALESCE могут оцениваться несколько раз.
Определение типа данных результирующего выражения отличается. ISNULL использует тип данных первого параметра, COALESCE следует правилам выражения CASE и возвращает тип данных значения с наивысшим приоритетом.
Обнуляемость выражения результата различна для ISNULL и COALESCE. Возвращаемое значение ISNULL всегда считается NOT NULLable (при условии, что возвращаемое значение является ненулевым), тогда как COALESCE с ненулевыми параметрами считается NULL. Таким образом, выражения ISNULL (NULL, 1) и COALESCE (NULL, 1), хотя их эквиваленты, имеют разные значения обнуляемости. Это имеет значение, если вы используете эти выражения в вычисляемых столбцах, создаете ключевые ограничения или делаете возвращаемое значение скалярного UDF-детерминированного, чтобы его можно было проиндексировать, как показано в следующем примере.
- Этот оператор не выполняется, потому что PRIMARY KEY не может принимать значения NULL - и обнуляемость выражения COALESCE для col2 - оценивается как NULL.
- Это утверждение успешно выполнено, потому что обнуляемость функции - ISNULL оценивается как NOT NOT NULL.
Проверки для ISNULL и COALESCE также различны. Например, значение NULL для ISNULL преобразуется в int, тогда как для COALESCE необходимо указать тип данных.
ISNULL принимает только 2 параметра, тогда как COALESCE принимает переменное количество параметров.
Если вам нужно узнать больше, вот полный документ из MSDN.
источник
С
coalesce
:Хотя, где суммирование
when condition then 1
, вы могли бы так же легко перейтиsum
наcount
- например:(
Count(null)
возвращает 0, аsum(null)
возвращает ноль.)источник
Когда вы говорите первые три столбца, вы имеете в виду ваши
SUM
столбцы? Если так, добавьтеELSE 0
к своимCASE
заявлениям.SUM
ИзNULL
стоимости являетсяNULL
.источник
Простой способ
источник
Оберните вашу колонку в этот код.
Может быть, проверить, почему вы получаете нули
источник
Использование
COALESCE
, которое возвращает первое ненулевое значение, напримерУстанавливает Succeeded как 0, если он возвращается как
NULL
.источник
Добавьте else к операторам case, чтобы они по умолчанию обнулялись, если условие теста не найдено. В настоящий момент, если условие теста не найдено, NULL передается функции SUM ().
источник
Если вы используете Presto, AWS Athena и т. Д., Функция ISNULL () отсутствует. Вместо этого используйте:
источник
проблема здесь в том, что без оператора else вы обязаны получить значение Null, если состояние выполнения не указано в описании столбца. Добавление чего-либо в Null приведет к появлению Null, и в этом проблема этого запроса.
Удачи!
источник
следуя предыдущим ответам, я терял имя своего столбца в базе данных SQL-сервера, однако следование этому синтаксису помогло мне также сохранить ColumnName
источник