web-dev-qa-db-fra.com

Avertissement: La valeur Null est éliminée par un agrégat ou une autre opération SET dans Aqua Data Studio.

J'ai un problème lorsque les données sont nulles et que l'avertissement apparaît lorsque le résultat est affiché. Comment résoudre ce problème?. Comment changer les données nulles en 0 quand aucune donnée dans la table?.

Ceci est mon code: -

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 

Le résultat apparaît comme ceci: -

 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)     
87
Amin SCO

Vous utiliseriez principalement COUNT pour résumer sur un UID. Donc

COUNT([uid]) produira l'avertissement:

Avertissement: La valeur Null est éliminée par un agrégat ou une autre opération SET.

tout en étant utilisé avec une jointure gauche, où l'objet compté n'existe pas.

Dans ce cas, utiliser COUNT(*) rendrait également des résultats incorrects, car vous compteriez alors le nombre total de résultats (c.-à-d. Les parents) existants.

En utilisant COUNT([uid]) IS une méthode de comptage valide, l'avertissement n'est rien d'autre qu'un avertissement. Toutefois, si vous êtes concerné et que vous souhaitez obtenir un nombre exact d'uid dans ce cas, vous pouvez utiliser:

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

Cela n’ajouterait pas beaucoup de frais généraux à votre requête. (testé mssql 2008)

95
Mat Traherne

Un moyen de résoudre ce problème consiste à désactiver les avertissements.

SET ANSI_WARNINGS OFF;
GO
20
Mukus

Utilisez ISNULL(field, 0) Il peut également être utilisé avec des agrégats:

ISNULL(count(field), 0)

Cependant, vous pourriez envisager de changer count(field) to count(*)

Modifier:

essayer:

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),
17
Chris Gessler

Vous voulez mettre la ISNULL à l'intérieur de la fonction COUNT, pas à l'extérieur:

Pas BON: ISNULL(COUNT(field), 0)

BON: COUNT(ISNULL(field, 0))

7
Ben Garrison