Tengo un problema cuando los datos son nulos y aparece la advertencia cuando se muestra el resultado. ¿Cómo resolver este problema?. ¿Cómo cambiar los datos nulos a 0 cuando no hay datos en la tabla ?.
Este es mi código: -
SELECT DISTINCT c.username AS assigner_officer,
d.description AS ticketcategory,
(SELECT Count(closed)
FROM ticket
WHERE assigned_to = c.user_id
AND closed IS NOT NULL
GROUP BY assigned_to)closedcases,
(SELECT Count(closed)
FROM ticket
WHERE assigned_to = c.user_id
AND closed IS NULL
GROUP BY assigned_to)opencases
FROM ticket a
JOIN ticketlog b
ON a.ticketid = b.ticketid
JOIN access c
ON a.assigned_to = c.user_id
JOIN ticket_category d
ON a.cat_code = d.id
JOIN lookup_department e
ON a.department_code = e.code
El resultado aparece así: -
Warnings: --->
W (1): Warning: Null value is eliminated by an aggregate or other SET operation.
<---
assigner_officer ticketcategory closedcases opencases
------------------- ----------------- -------------- ------------
abdulhafiz Enquiry (null) 0
affan Enquiry 12 (null)
amirul Enquiry 1 (null)
azrul_fahmi Enquiry 45 0
Azwani Enquiry (null) 0
chai Enquiry 4 (null)
dalinawati Enquiry 1 0
Emmy Complaints (null) 0
Fadhlia Enquiry 38 0
fairulhalif Others 1 (null)
farikh Enquiry (null) 0
ismailh Enquiry 28 0
izzahanna Enquiry (null) 0
Kamsuzilawati Enquiry 1 (null)
sql
sql-server-2005
Amin SCO
fuente
fuente
Count(closed) ... WHERE ... closed IS NULL
no tiene ningún sentido ya queCOUNT
solo cuentaNOT NULL
valoresRespuestas:
Lo utilizaría principalmente
COUNT
para resumir sobre un UID. Por lo tantoCOUNT([uid])
producirá la advertencia:mientras se utiliza con una combinación izquierda, donde el objeto contado no existe.
El uso
COUNT(*)
en este caso también generaría resultados incorrectos, ya que estaría contando el número total de resultados (es decir, padres) que existen.Usar
COUNT([uid])
IS es una forma válida de contar, y la advertencia no es más que una advertencia. Sin embargo, si está preocupado y desea obtener un recuento real de uids en este caso, puede usar:Esto no agregaría muchos gastos generales a su consulta. (probado mssql 2008)
fuente
count([uid])
, ¿funcionaría usarlocount(1)
?Una forma de resolver este problema es desactivando las advertencias.
fuente
SELECT SUM(X) FROM (VALUES ( 1 + NULL)) V(X);SELECT 'This is executed fine';
Utilización
ISNULL(field, 0)
También se puede utilizar con áridos:Sin embargo, podría considerar cambiar
count(field) to count(*)
Editar:
tratar:
fuente
ISNULL(count(field), 0)
no funcionó para mí en MSSQL 2008 R2. El problema era porque estaba tratando de contar un campo en una tabla unida externa izquierda para obtener el número de registros en la tabla unida relacionados con la tabla principal. Terminé teniendo que hacer una subconsulta que internamente unió las dos tablas para obtener el recuento por ID en la tabla principal. La subconsulta se dejó unida externamente a la tabla principal en el ID. Luego, el recuento de la subconsulta se envolvió en un ISNULL para obtener el 0 que quería (sin el mensaje de advertencia).Quieres poner el
ISNULL
interior de laCOUNT
función, no el exterior:No está bien:
ISNULL(COUNT(field), 0)
BUENO:
COUNT(ISNULL(field, 0))
fuente
count(ISNULL(field, 0))
será equivalente acount(*)
, ya que el valor que se está contando ya no puede serloNULL
.COUNT(ISNULL(field, 0))
sea diferente deCOUNT(*)
, hágalo, SQL Fiddle facilita compartir dicho contraejemplo. Pero no podrás. Dado queCOUNT
cuenta los valores no nulos incluso si son cero, yISNULL(field, 0)
siempre es un valor no nulo,COUNT(ISNULL(field, 0))
cuenta filas. Para esoCOUNT(*)
es y no para lo que buscaba el OP aquí.group by
consulta en un contexto diferente al que buscaba el OP. En mi caso,ISNULL(COUNT(field), 0)
devolvería un recuento de 0 para todos los valores NULL que era incorrecto ya que había múltiples valores nulos, mientrasCOUNT(ISNULL(field),0)
que devolvería el recuento correcto para el número total de valores NULL. Pero de nuevo, dos escenarios totalmente diferentes.Recibía este error; Solo puse una
WHERE
cláusula para el campo que se usó dentro de lacount
cláusula. resolvió el problema. Nota: si existe un valor nulo, verifique si es crítico para el informe, ya que está excluido en el recuento.Consulta antigua:
Nueva consulta:
fuente
Si existe algún valor nulo dentro de la función agregada, se enfrentará a este problema. En lugar del código siguiente
usar como
fuente