Tenho um problema quando os dados são nulos e o aviso aparece quando o resultado é exibido. Como resolver este problema?. Como alterar os dados nulos para 0 quando não há dados na tabela ?.
Este é o meu 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
O resultado aparece assim: -
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
fonte
fonte
Count(closed) ... WHERE ... closed IS NULL
não faz nenhum sentido, poisCOUNT
apenas contaNOT NULL
valoresRespostas:
Você usaria principalmente
COUNT
para resumir em um UID. PortantoCOUNT([uid])
irá produzir o aviso:enquanto estiver sendo usado com uma junção à esquerda, onde o objeto contado não existe.
COUNT(*)
Nesse caso, usar também renderizaria resultados incorretos, pois você contaria o número total de resultados (ou seja, pais) que existem.Usar
COUNT([uid])
É uma forma válida de contagem e o aviso nada mais é do que um aviso. No entanto, se você estiver preocupado e quiser obter uma contagem real de uids neste caso, poderá usar:Isso não aumentaria muito a sua consulta. (testado mssql 2008)
fonte
count([uid])
, funcionaria para usarcount(1)
?Uma maneira de resolver esse problema é desativando os avisos.
fonte
SELECT SUM(X) FROM (VALUES ( 1 + NULL)) V(X);SELECT 'This is executed fine';
Use
ISNULL(field, 0)
Também pode ser usado com agregados:No entanto, você pode considerar mudar
count(field) to count(*)
Editar:
experimentar:
fonte
ISNULL(count(field), 0)
não funcionou para mim no MSSQL 2008 R2. O problema era porque eu estava tentando contar um campo em uma tabela unida externa esquerda para obter o número de registros na tabela unida relacionada à tabela principal. Acabei tendo que fazer uma subconsulta que unia internamente as duas tabelas para obter a contagem por ID na tabela principal. A subconsulta foi deixada externamente associada à tabela principal no ID. A contagem da subconsulta foi então agrupada em um ISNULL para obter o 0 que eu queria (sem a mensagem de aviso).Você deseja colocar o
ISNULL
interior daCOUNT
função, não o exterior:Não é bom:
ISNULL(COUNT(field), 0)
BOA:
COUNT(ISNULL(field, 0))
fonte
count(ISNULL(field, 0))
será equivalente acount(*)
, pois o valor que está sendo contado não pode mais serNULL
.COUNT(ISNULL(field, 0))
é diferenteCOUNT(*)
, faça-o. O SQL Fiddle torna mais fácil compartilhar esse contra-exemplo. Mas você não será capaz. ComoCOUNT
conta os valores não nulos, mesmo que sejam zero, eISNULL(field, 0)
sempre é um valor não nulo,COUNT(ISNULL(field, 0))
conta as linhas. É para isso queCOUNT(*)
serve e não para o que o OP aqui estava atrás.group by
consulta em um contexto diferente daquele que o OP buscava. No meu caso,ISNULL(COUNT(field), 0)
retornaria uma contagem de 0 para todos os valores NULL, o que estava incorreto, pois havia vários valores nulos, ao passoCOUNT(ISNULL(field),0)
que retornaria a contagem correta para o número total de valores NULL. Mas, novamente, dois cenários totalmente diferentes.Eu estava recebendo este erro; Acabei de colocar uma
WHERE
cláusula para o campo que foi usado nacount
cláusula. resolveu o problema. Nota: se existir valor nulo, verifique se é crítico para o relatório, pois está excluído da contagem.Consulta antiga:
Nova consulta:
fonte
Se houver qualquer valor Nulo dentro da função agregada, você enfrentará esse problema. Em vez do código abaixo
usar como
fonte