Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1729 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  afficher ligne group by meme si pas de valeurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

afficher ligne group by meme si pas de valeurs

n°1348554
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 09:59:17  profilanswer
 

Salut ;)
 
Voila mon probleme :
D'un coté j'ai une table ETAT_DOSSIER contenant un code_etat et un titre_etat pour chaqu'un de mes 8 etats
De l'autre j'ai une table DOSSIER défini par un code_dossier
 
Je fais une requete qui pour chaque etat de dossier me compte le nombre de dossier :

Code :
  1. SELECT COUNT( DISTINCT D.code_dossier ) AS 'Nombre de dossiers', E.lib_etat AS 'Etat'
  2. FROM DOSSIER D, ETAT_DOSSIER E
  3. WHERE D.code_etat = E.code_etat
  4. GROUP BY E.code_etat
  5. ORDER BY E.code_etat


 
Ca marche mais probleme : je n'ai en retour que les ETATS de dossier qui correspondent à au moins un dossier.
Par exemple: l'etat "DOSSIER CLOTURé" ne correspond pour l'instant à aucun dossier, et dans le resultat de la requete au lieu d'avoir :

Code :
  1. Dossier cloturé : 0


je n'ai carrément pas de ligne.
 
Comment remédier a cela?  
 
merci ! :hello:

mood
Publicité
Posté le 18-04-2006 à 09:59:17  profilanswer
 

n°1348592
Beegee
Posté le 18-04-2006 à 10:37:27  profilanswer
 

Il te faut une jointure externe :)
 

Code :
  1. SELECT COUNT( DISTINCT D.code_dossier ) AS 'Nombre de dossiers', E.lib_etat AS 'Etat'
  2. FROM ETAT_DOSSIER E
  3. LEFT JOIN DOSSIER D ON D.code_etat = E.code_etat
  4. GROUP BY E.code_etat
  5. ORDER BY E.code_etat;

n°1348598
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 10:46:21  profilanswer
 

merci beaucoup :)
 
Je ne connaissais pas ce type de jointure, c'est intéressant .
 
Autre petite question : J'utilise cette requete pour afficher les resultat sur une page web.
Comment puis-je récupérer les noms des champs ('Etat' et 'Nombre de dossiers') automatiquement pour les mettre en en-tete de tableau (dans un <th></th> ) ?
j'en ai besoin pour traiter pas mal de requetes différentes dont l'ordre, le nombre et la nature des champs sont différents.
 
merci de ton aide :)
:hello:

n°1348619
Beegee
Posté le 18-04-2006 à 11:12:17  profilanswer
 

J'imagine que tu utilises du code PHP pour attaquer une base mySql :
 
http://www.manuelphp.com/php/funct [...] d-name.php

n°1348631
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 11:21:03  profilanswer
 

Merci encore, c'est parfait :)
 
Bonne journée

n°1348819
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 14:51:37  profilanswer
 

C'est encore moi :)
 
Bon, j'ai vraiment du mal avec les jointures, surtout que la je dois en faire 2 en meme temps :
 
SELECT Z.lib_zone_geo AS 'Zone géographique', COUNT(distinct D.code_dossier) AS 'Nombre de bénéficiaires'  
                     FROM (ZONE_GEO Z
                     LEFT JOIN DEMANDEUR M ON Z.code_zone_geo = M.code_zone_geo)
                     INNER JOIN DOSSIER D ON M.code_demandeur = D.code_demandeur
                     WHERE code_etat = 8  
                     GROUP BY Z.code_zone_geo
                     ORDER BY lib_zone_geo
 
En gros, je veux le nombre de dossier par zone_geo où code_etat = 8
Actuellement ma requete affiche bien les dossiers dans ce cas mais je voudrais aussi qu'elle m'affiche TOUTES les zone_geo meme si il ya 0 dossiers (meme probleme que 3 post au dessus en fait)
 
Je continue a bidouiller de mon coté :(

n°1348833
Beegee
Posté le 18-04-2006 à 15:05:54  profilanswer
 

Peut-être en mettant DEMANDEUR comme table principale et les 2 autre tables en jointure externe ...
 
SELECT Z.lib_zone_geo AS 'Zone géographique', COUNT(distinct D.code_dossier) AS 'Nombre de bénéficiaires'
FROM DEMANDEUR M
LEFT JOIN ZONE_GEO Z ON Z.code_zone_geo = M.code_zone_geo
LEFT JOIN DOSSIER D ON M.code_demandeur = D.code_demandeur
WHERE Z.code_etat = 8
GROUP BY Z.code_zone_geo
ORDER BY lib_zone_geo;

n°1348841
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 15:11:46  profilanswer
 

Non toujours le meme résultat :(

n°1348860
Beegee
Posté le 18-04-2006 à 15:21:36  profilanswer
 

Et comme ça ?
 
SELECT Z.lib_zone_geo AS Zone_geographique, COUNT(DISTINCT D.code_dossier) AS Nombre_de_beneficiaires  
FROM ZONE_GEO Z
LEFT JOIN DEMANDEUR M ON Z.code_zone_geo = M.code_zone_geo
LEFT JOIN DOSSIER D ON M.code_demandeur = D.code_demandeur
WHERE code_etat = 8
GROUP BY Z.lib_zone_geo
ORDER BY Z.lib_zone_geo;

n°1348870
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 15:27:11  profilanswer
 

Non plus :(
 
Ca fait 2h que j'essaye toutes les solutions avec des left join right join.. Je commence a m'arracher les cheveux la en fait.
 
La seule requete qui marche c'est :
SELECT Z.lib_zone_geo AS 'Zone géographique', COUNT(distinct M.code_demandeur) AS 'Nombre de bénéficiaires'  
                     FROM (ZONE_GEO Z
                     LEFT JOIN DEMANDEUR M ON Z.code_zone_geo = M.code_zone_geo)
 
                     GROUP BY Z.code_zone_geo
 
Mais c'est pas ce que je veux, dès que je rajoute une jointure et donc une table.. tout plante!
 
Jvais craquer dans pas longtemps :d

mood
Publicité
Posté le 18-04-2006 à 15:27:11  profilanswer
 

n°1348876
Beegee
Posté le 18-04-2006 à 15:31:04  profilanswer
 

Déjà, tu ne devrais pas faire un group by sur code_zone_geo et afficher lib_zone_geo ... mySql te laisse faire mais en réalité il doit afficher une valeur au hasard pour lib_zone_geo q'il y en a plusieurs par code_zone_geo !
 
D'autre part, tu tournes sur quelle version de mySql ?
 
Tu devrais pouvoir t'en sortir avec une sous-requête, du style LEFT JOIN (SELECT ... FROM table1, table2), ou encore LEFT JOIN (SELECT ... FROM table1 LEFT JOIN table2 ...).

n°1348927
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 15:54:38  profilanswer
 

Alors pour le group by, oui, il est foireux, mais le problme reste le meme :(
 
version sql : MySQL - 4.0.26-debug
 
je vais tenter avec sous-requete mais jsuis au bord du suicide la

n°1348993
bixibu
Ca ... c'est fait!
Posté le 18-04-2006 à 16:37:02  profilanswer
 

Bon allez ca me les brise, je ferais autant de requete qu'il ya de zone geo, et BASTA
 
Merci pour ton aide en tous cas.
 
@+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  afficher ligne group by meme si pas de valeurs

 

Sujets relatifs
[Javascript/HTML] Afficher une image localArgent facile ? Quelques a ligne a lire...
parcourir ligne par ligne une selectionAutoriser d'afficher la page que pour ceux venant d'une page définie
[C++/Qt/résolu] afficher avec un QCanvas, help![VBA] [Excel] Chercher la première ligne après un graphique
Ecriture dans un fichier valeurs HEXAfficher une image selon requette sql
Afficher la cellule dans 1 textbox par intersection ligne & colonne 
Plus de sujets relatifs à : afficher ligne group by meme si pas de valeurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR