|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 91 ![]() |
Salut à toutes et à tous,
J'essaye d'écrire une requête pour me sortir un comptage d'élément dans une table intermédaire qui crée un lien n-n entre 2 tables. Voici la requête : Code :
Elle me retourne, par exemple : TblSecteurs_NumMandat| TblSecteurs_NumSecteur | NbrPP ------------------------------------------------------------------- 2791 | 2 | 12 2791 | 3 | 7 2791 | 4 | 3 2791 | 5 | 1 2791 | 6 | 2 2791 | 7 | 3 2791 | 9 | 1 2791 | 10 | 2 Remarquez qu'il n'y a pas de ligne 1 ni de ligne 8. Normal me direz-vous, puisqu'il n'y a pas de ligne reprenant son Id dans le champs TblIntermediairePPSecteurs_PPID de la table TblIntermediairePPSecteurs. Oui bien sur, mais c'est que j'aurais besoin de ces 0. J'ai bien essayé cette requête mais elle me donne exactement la même chose : Code :
J'ai bien entendu aussi essayer de remplacer les JOIN par des RIGHT OUTER JOIN ou par des RIGHT JOIN mais ça n'a rien donné de différent. Merci de vos z'avis z'avisés, Jean-Marc |
||||
|
|
00
|
|
|
#2 | ||||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 91 ![]() |
Re-salut à toutes et à tous,
J'ai un peu évolué dans ma recherche, mais je n'ai toujours pas la solution. Ce code fonctionne et me retourne les 0 là où il les faut mais il est incomplet donc il ne me donne pas la bonne solution : Code :
Le résultat est donc que les secteurs contenant 0 sont affichés, mais que le count n'est pas correct. Une fois cette clause ajoutée pour former ce code : Code :
Comment résoudre ce problème ? Merci de vos z'avis z'avisés, Jean-Marc |
||||
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : août 2007 Messages : 128 ![]() |
Tu dois pouvoir t'en sortir en utilisant la fonction generate_series qui créera une séquence de x valeurs (par exemple
Code :
SELECT i FROM generate_series(1, 10) AS i; En utilisant cette « table virtuelle », tu dois pouvoir résoudre ton problème. |
|
|
00
|
|
|
#4 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 91 ![]() |
Merci de ta proposition.
J'ai aussi trouvé une solution que je donne ici, au cas où elle servirait à quelqu'un : J'ai utilisé un coalesce mais il faut l'utiliser dans la clause where et non dans le select. En effet, dans le select cela ne peut rien retourner puisque l'élément est éliminé par le where avant d'atteindre le select. En mettant le coalesce dans le where pour qu'il retourne une valeur et qu'il passe le where, cela fonctionne très bien. Dans mon cas, il s'agissait de compter des points liés à des secteurs via une table intermédiaire qui crée une relation n-n entre les tables de points et de secteurs. Il fallait compter le nombre de points dans chaque secteur. Si un secteur ne contient aucun point, il n'y a biensur aucune ligne contenant ce secteur dans la table intermédiaire. Il est donc impossible de tester les points de ce secteur pour voir si leur clause graphique (ce que je teste dans le where) est à True ou à False. J'ai donc mis le coalesce dans le where pour qu'il retourne un True (ceux qui passent le where) pour les points qui retournent un null. Une fois que le where est passé de la sorte, le count retourne un 0 et le secteur est donc bien affiché avec une valeur 0 au lieu de ne plus être retourné par la requête. En résumé, et peut-être un plus clair Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com