He desarrollado una consulta y en los resultados de las tres primeras columnas que obtengo NULL
. ¿Cómo puedo reemplazarlo 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
Bhaskar Mishra
fuente
fuente
Respuestas:
Cuando desee reemplazar una posible
null
columna con otra cosa, use IsNull .Esto pondrá un 0 en myColumn si es nulo en primer lugar.
fuente
Puede usar ambos métodos, pero hay diferencias:
Comparando COALESCE () y ISNULL ():
La función ISNULL y la expresión COALESCE tienen un propósito similar pero pueden comportarse de manera diferente.
Debido a que ISNULL es una función, se evalúa solo una vez. Como se describió anteriormente, los valores de entrada para la expresión COALESCE se pueden evaluar varias veces.
La determinación del tipo de datos de la expresión resultante es diferente. ISNULL usa el tipo de datos del primer parámetro, COALESCE sigue las reglas de expresión CASE y devuelve el tipo de datos de valor con la mayor prioridad.
La NULLability de la expresión del resultado es diferente para ISNULL y COALESCE. El valor de retorno ISNULL siempre se considera NO NULABLE (suponiendo que el valor de retorno sea no anulable) mientras que COALESCE con parámetros no nulos se considera NULL. Entonces las expresiones ISNULL (NULL, 1) y COALESCE (NULL, 1) aunque equivalentes tienen valores de nulabilidad diferentes. Esto hace la diferencia si está utilizando estas expresiones en columnas calculadas, creando restricciones clave o haciendo que el valor de retorno de un UDF escalar sea determinista para que pueda indexarse como se muestra en el siguiente ejemplo.
- Esta declaración falla porque la PRIMARY KEY no puede aceptar valores NULL, y la nulabilidad de la expresión COALESCE para col2 se evalúa como NULL.
- Esta declaración tiene éxito porque la nulabilidad de la función - ISNULL evalúa AS NOT NULL.
Las validaciones para ISNULL y COALESCE también son diferentes. Por ejemplo, un valor NULL para ISNULL se convierte en int, mientras que para COALESCE, debe proporcionar un tipo de datos.
ISNULL toma solo 2 parámetros, mientras que COALESCE toma un número variable de parámetros.
si necesita saber más aquí está el documento completo de msdn.
fuente
Con
coalesce
:Aunque, en resumen
when condition then 1
, podría cambiar fácilmentesum
acount
, por ejemplo:(
Count(null)
devuelve 0, mientras quesum(null)
devuelve nulo)fuente
Cuando dices las primeras tres columnas, ¿te refieres a tus
SUM
columnas? Si es así, agregueELSE 0
a susCASE
declaraciones. ElSUM
de unNULL
valor esNULL
.fuente
Una forma simple es
fuente
Envuelva su columna en este código.
Tal vez compruebe por qué está obteniendo nulos
fuente
Uso
COALESCE
, que devuelve el primer valor no nulo, p. Ej.Establecerá Éxito como 0 si se devuelve como
NULL
.fuente
Agregue un else a sus declaraciones de caso para que su valor predeterminado sea cero si no se encuentra la condición de prueba. Por el momento, si no se encuentra la condición de prueba, se pasa NULL a la función SUM ().
fuente
Si está utilizando Presto, AWS Athena, etc., no hay función ISNULL (). En cambio, use:
fuente
El problema aquí es que sin la instrucción else, está obligado a recibir un Nulo cuando el estado de ejecución no es el estado indicado en la descripción de la columna. Agregar cualquier cosa a Null dará como resultado Null, y ese es el problema con esta consulta.
¡Buena suerte!
fuente
siguiendo las respuestas anteriores, estaba perdiendo el nombre de mi columna en el servidor SQL db, sin embargo, seguir esta sintaxis también me ayudó a retener el ColumnName
fuente