Bonjour à tous,
Je m'excuse d'avance si certains trouvent la question idiote mais je n'arrive pas à solutionner ce problème, alors autant poser la question et apprendre.
Contexte :
J'ai une base de données avec 2 tables :
- une table reprenant des agents (ID_agt, nom, prénom)
- une table avec des supports (ID_sup, serialnumber, ID_agt)
Un agent est sensé n'avoir qu'un support mais dans le doute, je cherche à réaliser une requête qui renvoie :
- l'ensemble des agents (même ceux sans carte)
- avec un comptage du nombre de cartes qu'ils ont (0, 1, 2, ...)
Du coup, j'essaie ça :
Code :
- select distinct agent.nom, agent.prénom, count(support.ID_agt) from agent left join support on agent.ID = support.ID_agt group by support.ID_agt order by agent.nom;
|
Mon problème, c'est que dans la table des supports, un support qui n'a pas été attribué a une valeur NULL dans la colonne ID_agt. Du coup, avec la requête ci-dessus, les agents qui n'ont pas de support attribué ne sortent pas.
J'ai donc essayé de remplacer la valeur NULL par une valeur 0 de la sorte :
Code :
- select distinct agent.nom, agent.prénom, count(case when support.ID_agt is null then 0 else 1 end) from agent left join support on agent.ID = support.ID_agt group by support.ID_agt order by agent.nom;
|
Nouveau problème: la valeur 0 étant un enregistrement, COUNT() la comptabilise. Et donc, tous mes agents sortent avec au minimum un support !!!
J'ai bien tenté de réaliser la même chose avec un SUM():
Code :
- select distinct agent.nom, agent.prénom, sum(case when support.ID_agt is null then 0 else 1 end) from agent left join support on agent.ID = support.ID_agt group by support.ID_agt order by agent.nom;
|
Mais j'ai dans ma base 16 agents différents qui ont le même nom et au final, la requête renvoie le nom et un comptage de 16 supports...
Bref, je ne m'en sors pas et un peu d'aide serait la bienvenue
Merci d'avance !