Attention: 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 à 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) 

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

COUNT([uid]) produira l’avertissement:

Attention: 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’object compté n’existe pas.

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

Utiliser COUNT([uid]) est un moyen de comptage valide, et l’avertissement n’est rien d’autre qu’un avertissement. Cependant, si vous êtes concerné et que vous voulez avoir un compte réel des uids dans ce cas, vous pouvez utiliser:

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

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

Une façon de résoudre ce problème consiste à désactiver les avertissements.

 SET ANSI_WARNINGS OFF; GO 

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

 ISNULL(count(field), 0) 

Cependant, vous pouvez envisager de modifier le 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), 

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

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

BON: COUNT(ISNULL(field, 0))

Si une valeur nulle existe dans la fonction d’agrégation, vous rencontrerez ce problème. Au lieu de code ci-dessous

  SELECT Count(closed) FROM ticket WHERE assigned_to = c.user_id AND closed IS NULL 

utiliser comme

 SELECT Count(ISNULL(closed, 0)) FROM ticket WHERE assigned_to = c.user_id AND closed IS NULL