Предупреждение: нулевое значение исключается агрегатной или другой операцией набора в Aqua Data Studio


у меня есть проблема, когда данные равны нулю и предупреждение появляется, когда результат отображается. Как решить эту проблему?. Как изменить нулевые данные на 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)     
5 77

5 ответов:

вы бы в основном использовать COUNT для подведения итогов по UID. Поэтому

COUNT([uid]) выдаст предупреждение:

предупреждение: нулевое значение исключается агрегатом или другой операцией набора.

при использовании с левым соединением, где подсчитанный объект не существует.

используя COUNT(*) в этом случае также будут отображаться неверные результаты, так как вы будете подсчитывать общее количество результатов (т. е. родителей), которые существовать.

используя COUNT([uid]) является допустимым способом подсчета, и предупреждение не более чем предупреждение. Однако если вы обеспокоены, и вы хотите получить истинное количество жидкости в этом случае можно использовать:

SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]

Это не добавит много накладных расходов на ваш запрос. (проверено mssql 2008)

один из способов решить эту проблему-отключить предупреждения.

SET ANSI_WARNINGS OFF;
GO

использовать ISNULL(field, 0) Он также может быть использован с заполнителями:

ISNULL(count(field), 0)

тем не менее, вы можете рассмотреть возможность изменения count(field) to count(*)

Edit:

попробуй:

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)

хорошо: COUNT(ISNULL(field, 0))

Если какое-либо значение 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