警告:在Aqua Data Studio中,空值由集合或其他SET操作消除
数据为空时出现问题,显示结果时出现警告。 如何解决这个问题呢?。 当表中没有数据时如何将空数据更改为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) 
	
 您将主要使用COUNT来通过UID进行汇总。 因此 
  COUNT([uid])会产生警告: 
警告:空值由集合或其他SET操作消除。
同时与左连接一起使用,其中计数的对象不存在。
 在这种情况下使用COUNT(*)也会导致不正确的结果,因为您将计算存在的结果总数(即父项)。 
 使用COUNT([uid])是一种有效的计数方式,警告只不过是一个警告。 但是,如果您担心,而且您希望在这种情况下获得真正的uid数,那么您可以使用: 
 SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count] 
这不会增加大量的开销到您的查询。 (testing的mssql 2008)
解决这个问题的一个办法就是closures警告。
 SET ANSI_WARNINGS OFF; GO 
 使用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), 
 你想把ISNULL放在COUNT函数里面,而不是在外面: 
 不好: ISNULL(COUNT(field), 0) 
  GOOD: COUNT(ISNULL(field, 0)) 
如果集合函数内存在任何空值,则将面临此问题。 而不是下面的代码
  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