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