Salut, et pourtant la solution de Docgranville passe par Ifnull (que j'ai essayé sans succès, je comprendrais sûrement demain pourquoi -_-)
Le 21 avril 2010 22:30, ribotb <rib...@gmail.com> a écrit : > Bonsoir Marie-Pierre, > > Je ne me suis pas penché sur ce "problème" (intéressant) mais je peux te > dire en tout cas que le résultat ne peut pas être NULL. NULL n'est pas une > valeur mais c'est un *état *qui indique que la valeur d'un élément est > inconnue ou indéterminée. > > Bernard > > Le 21/04/2010 19:11, Marie-Pierre CORONEL a écrit : >> >> re bonjour, >> >> non non, je ne tiens pas à traiter les 3 régimes différemment, j'avais >> essayé d'obtenir les calculs sur les 3 d'un coup mais je n'obtenais >> jamais un chiffre juste -_- La seule fois où j'ai enfin obtenu un >> chiffre juste c'est avec le système des 3 requêtes sauf quand j'ai >> testé avec 0 occurence. Là je suis rentrée chez moi, mais je >> regarderai tes requêtes demain. >> >> Je veux bien qu'on discute de la rigidité de ma base, parce que j'ai >> essayé de faire le plus pérenne possible et donc le contraire :'( mais >> bon... >> >> a+ >> >> Le 21 avril 2010 19:04, Docgranville<docgranvi...@aol.com> a écrit : >> >>> >>> Le 21/04/2010 18:04, Marie-Pierre CORONEL a écrit : >>> >>>> >>>> hum j'ai voulu faire du ménage dans ci-joint... et j'ai supprimé le >>>> mauvais fichier... >>>> >>>> nouveau lien >>>> http://www.cijoint.fr/cjlink.php?file=cj201004/cijMs7dYvM.odb >>>> >>>> >>>> >>> >>> Re-bonjour Marie-Pierre, >>> >>> J'ai jeté un coup d'oeil rapide sur ta base ; peut-être aurais-je (à >>> l'occasion) quelques réflexions à te faire partager sur sa conception qui >>> me >>> semble un peu trop complexe (ou rigide si tu préfères). >>> >>> En ce qui concerne ton problème particulier, je n'en connais pas >>> véritablement la solution mais je pense (c'est déjà quelque chose) en >>> connaître l'origine ; en réalité, je pense que le souci vient du fait que >>> ta >>> requête porte sur une table vide ( plus précisément sur une vue vide, >>> celle >>> générée par la "Regime_allocations_part2_CMSA") ; la clause ifnull permet >>> de >>> sauter un champ "null" dans un enregistrement mais, en l'occurrence, il >>> n'y >>> a carrément pas d'enregistrement (puisqu'aucun enregistrement de la table >>> demandeurs ne correspond aux critères fixés dans cette fameuse requête >>> "Regime_allocations_part2_CMSA". >>> >>> Pour éviter ça, je me suis dit que, peut-être, tu pourrais faire une >>> requête >>> (et éventuellement une vue) synthétisant, sur la période requise, le >>> nombre >>> d'allocataires de type "part1" pour chaque code d'allocation ; ta requête >>> Regime_allocation_partie1_CMSA deviendrait : >>> SELECT COUNT( "Demandeurs"."part1alloc" ) AS "nombre1", >>> "Demandeurs"."part1alloc" FROM "Mediations_toutes_Selection_periode", >>> "Demandeurs" WHERE "Mediations_toutes_Selection_periode"."demandeurs" = >>> "Demandeurs"."no_demandeurs" GROUP BY "Demandeurs"."part1alloc" >>> (en fait, je n'ai supprimé que la clause HAVING) >>> >>> Si on fait la même chose sur ta requête Regime_allocation_partie2_CMSA, >>> elle >>> devient : >>> SELECT "Demandeurs"."part2alloc", COUNT( IFNULL( >>> "Demandeurs"."part2alloc", >>> 0 ) ) AS "nombre2" FROM "Mediations_toutes_Selection_periode", >>> "Demandeurs" >>> WHERE "Mediations_toutes_Selection_periode"."demandeurs" = >>> "Demandeurs"."no_demandeurs" GROUP BY "Demandeurs"."part2alloc" >>> (ici aussi, donc, siplement suppression de la clause HAVING). >>> >>> Avec ces requêtes, on obtient un tableau regroupant, pour chaque code >>> d'allocation, le nombre d'allocataires sur la période. >>> >>> La dernière requête est modifiée un peu plus en profondeur ; il s'agit de >>> la >>> requête Regime_allocations_CMSA_Total, qui devient : >>> SELECT "regimeCMSApart1"."part1alloc", ifnull("nombre1",0) as "nombre1", >>> ifnull("nombre2",0) as "nombre2", ifnull("regimeCMSApart1"."nombre1",0) + >>> ifnull("regimeCMSApart2"."nombre2",0) AS "Total" FROM "regimeCMSApart1" >>> left >>> join "regimeCMSApart2" on "regimeCMSApart1"."part1alloc" = >>> "regimeCMSApart2"."part2alloc" >>> (attention, cette requête porte sur les vues ; il ne faut donc pas >>> oublier >>> de les modifier, sinon, elle sont toujours avec la clause HAVING) >>> >>> Tu obtiens avec ça un tableau comportant une colonne énonçant les >>> différents >>> types d'allocations rencontrés (ici, 0, 1 et 2), une colonne mentionnant >>> le >>> nombre d'allocataires "partie 1" bénéficiant de ce type d'allocation (ou >>> 0 >>> s'il n'y en a pas mais en l'occurrence, ce n'est pas possible), un >>> colonne >>> mentionnant le nombre d'allocataires "partie 2" bénéficiant de ce type >>> d'allocation (ou 0, et ici c'est possible) et enfin une colonne >>> totalisant >>> les deux chiffres précédents. >>> >>> Je pense que, dans l'esprit, ça ressemble à ce que tu veux ; ensuite, si >>> tu >>> veux avoir une requête avec uniquement tel ou tel type d'allocation, tu >>> peux >>> parfaitement pointer sur cette dernière requête et en extraire "nombre1" >>> et >>> "noùmbre2" qui seront toujours renseignés (puisque le ifnull est utilisé >>> pour créer cette requête). >>> >>> On pourra en re-discuter un peu plus tard si tu veux. >>> >>> A+ >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org >>> For additional commands, e-mail: users-h...@fr.openoffice.org >>> >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org >> For additional commands, e-mail: users-h...@fr.openoffice.org >> >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org > For additional commands, e-mail: users-h...@fr.openoffice.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@fr.openoffice.org For additional commands, e-mail: users-h...@fr.openoffice.org