警告:Aqua Data Studio中的聚合或其他SET操作消除了空值

时间:2012-07-08 15:28:03

标签: 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 

结果如下所示: -

 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)     

6 个答案:

答案 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