数据为空时出现问题,显示结果时出现警告。 如何解决这个问题呢?。如果表中没有数据,如何将空数据更改为0?
这是我的代码: -
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
结果如下所示: -
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)
答案 0 :(得分:92)
您大多使用COUNT
来总结UID。因此
COUNT([uid])
会产生警告:
警告:聚合或其他SET操作消除了空值。
与左连接一起使用时,计数对象不存在。
在这种情况下使用COUNT(*)
也会导致错误的结果,因为您将计算存在的结果总数(即父项)。
使用COUNT([uid])
是一种有效的计数方式,警告只不过是一个警告。但是,如果你担心,并且你想在这种情况下得到真正的uid数,那么你可以使用:
SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]
这不会给您的查询增加很多开销。 (经过测试的mssql 2008)
答案 1 :(得分:19)
解决此问题的一种方法是关闭警告。
SET ANSI_WARNINGS OFF;
GO
答案 2 :(得分:17)
使用ISNULL(field, 0)
它也可以与聚合一起使用:
ISNULL(count(field), 0)
但是,您可以考虑更改count(field) to count(*)
编辑:
尝试:
closedcases = ISNULL(
(select count(closed) from ticket
where assigned_to = c.user_id and closed is not null
group by assigned_to), 0),
opencases = ISNULL(
(select count(closed) from ticket
where assigned_to = c.user_id and closed is null
group by assigned_to), 0),
答案 3 :(得分:7)
您想将ISNULL
放在COUNT
函数内,而不是放在外面:
不好:ISNULL(COUNT(field), 0)
好的:COUNT(ISNULL(field, 0))
答案 4 :(得分:-1)
我收到此错误;我只是为WHERE
子句中使用的字段添加了count
子句。它解决了这个问题。注意:如果存在空值,请检查其是否对报告至关重要,因为计数中未包含该值。
旧查询:
select city, Count(Emp_ID) as Emp_Count
from Emp_DB
group by city
新查询:
select city, Count(Emp_ID) as Emp_Count
from Emp_DB
where Emp_ID is not null
group by city
答案 5 :(得分:-2)
如果聚合函数中存在任何Null值,您将面临此问题。 而不是下面的代码
SELECT Count(closed)
FROM ticket
WHERE assigned_to = c.user_id
AND closed IS NULL
使用
SELECT Count(ISNULL(closed, 0))
FROM ticket
WHERE assigned_to = c.user_id
AND closed IS NULL