Ami*_*SCO 89 sql sql-server-2005
数据为空时出现问题,显示结果时出现警告.如何解决这个问题呢?.如果表中没有数据,如何将空数据更改为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
Run Code Online (Sandbox Code Playgroud)
结果如下: -
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)
Run Code Online (Sandbox Code Playgroud)
小智 95
您将主要COUNT
用于总结UID.因此
COUNT([uid])
会产生警告:
警告:聚合或其他SET操作消除了空值.
与左连接一起使用时,计数对象不存在.
COUNT(*)
在这种情况下使用也会产生不正确的结果,因为您将计算存在的结果总数(即父项).
使用COUNT([uid])
IS是一种有效的计数方式,警告只不过是一个警告.但是,如果你担心,并且你想在这种情况下得到真正的uid数,那么你可以使用:
SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]
Run Code Online (Sandbox Code Playgroud)
这不会给查询增加很多开销.(经过测试的mssql 2008)
Muk*_*kus 20
解决此问题的一种方法是关闭警告.
SET ANSI_WARNINGS OFF;
GO
Run Code Online (Sandbox Code Playgroud)
Chr*_*ler 17
使用ISNULL(field, 0)
它也可以与聚合一起使用:
ISNULL(count(field), 0)
Run Code Online (Sandbox Code Playgroud)
但是,您可以考虑更改 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),
Run Code Online (Sandbox Code Playgroud)
小智 7
你想把函数的ISNULL
内部COUNT
,而不是外部:
不好: ISNULL(COUNT(field), 0)
好: COUNT(ISNULL(field, 0))