Te sugerimos que pruebes esta respuesta en un entorno controlado antes de pasarlo a producción, saludos.
Solución:
Cuando desee reemplazar un posible null
columna con algo más, use IsNull.
SELECT ISNULL(myColumn, 0 ) FROM myTable
Esto pondrá un 0 en myColumn si es null en primer lugar.
Puede usar ambos métodos, pero hay diferencias:
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
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 prioridad más alta.
-
La capacidad NULL de la expresión de resultado es diferente para ISNULL y COALESCE. El valor devuelto por ISNULL siempre se considera NO NULLable (asumiendo que el valor devuelto no es anulable) mientras que COALESCE con no-null los parámetros se consideran NULL. Entonces, las expresiones ISNULL(NULL, 1) y COALESCE(NULL, 1), aunque equivalentes, tienen diferentes valores de nulabilidad. Esto hace una diferencia si está usando estas expresiones en columnas calculadas, creando key restricciones o hacer que el valor de retorno de una UDF escalar sea determinista para que pueda indexarse como se muestra en el siguiente ejemplo.
— Esta declaración falla porque PRIMARY KEY no puede aceptar valores NULL — y la nulabilidad de la expresión COALESCE para col2 — se evalúa como NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
— Esta declaración tiene éxito porque la nulabilidad de la función — ISNULL se evalúa COMO NO NULL.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
-
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.
Con coalesce
:
coalesce(column_name,0)
Aunque, donde sumando when condition then 1
podrías cambiar fácilmente sum
para count
– p.ej:
count(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
(Count(null)
devuelve 0, mientras que sum(null)
devoluciones null.)