Requête ne me renvoit pas tout

maw -  
 maw -
Bonjour,

je dois actuellement faire une base de données pour les ressources humaines de mon entreprise, ils me demandent de calculer la part des effectifs cdd et effectifs cdi, dans chaque unité, au niveau régional et au niveau national,
ceci ne me pose pas de problème.
Mon soucis est que je veux faire une table qui me calcule les parts et je veux une ligne par unité avec rappel du national et du régional, mais toutes les unités n'ont pas de références régionales et donc évidemment ma requête ne me retourne que les unités ayant des régions.
Voici ma requête, si vous avez une ou deux idées en rab, ce serait gentil ^^
Merci d'avance

 
SELECT DISTINCTROW effectif_cdd.période, effectif_cdd.code_ens, effectif_cdd.code_reg, effectif_cdd.code_resto,  
effectif_cdd.eff_moy_cdi_cdd AS total, eff_cdd_reg.eff_moy_cdi_cdd_reg AS total_reg, eff_cdd_nat.eff_moy_cdi_cdd_nat AS total_nat,  
eff_moy_cdd/eff_moy_cdi_cdd AS part_cdd, eff_moy_cdd_reg/eff_moy_cdi_cdd_reg AS part_cdd_reg, eff_moy_cdd_nat/eff_moy_cdi_cdd_nat AS part_cdd_nat, eff_moy_tpa_cdd/eff_moy_cdd AS part_tpa, eff_moy_tpa_cdd_reg/eff_moy_cdd_reg AS part_tpa_reg, eff_moy_tpa_cdd_nat/eff_moy_cdd_nat AS part_tpa_nat, eff_moy_tc_cdd/eff_moy_cdd AS part_tc, eff_moy_tc_cdd_reg/eff_moy_cdd_reg AS part_tc_reg, eff_moy_tc_cdd_nat/eff_moy_cdd_nat AS part_tc_nat, eff_moy_tpl_cdd/eff_moy_cdd AS part_tpl, eff_moy_tpl_cdd_reg/eff_moy_cdd_reg AS part_tpl_reg, eff_moy_tpl_cdd_nat/eff_moy_cdd_nat AS part_tpl_nat 
FROM effectif_cdd, eff_cdd_reg, eff_cdd_nat, resto 
WHERE (((effectif_cdd.période)=[forms]![choix_période]![trimestre]) AND ((effectif_cdd.code_ens)=[eff_cdd_nat].[code_ens]) AND ((effectif_cdd.code_reg)=[eff_cdd_reg].[code_reg]));

5 réponses

Defouille Messages postés 404 Statut Membre 54
 
Je ne connais pas bien access, mais il implémente le SQL, donc il doit y avoir un moyen, même si la syntaxe change un petit peu.

Essai d'abord avec des requêtes simples comme :
SELECT * FROM effectif_cdd as e1 LEFT OUTER JOIN  eff_cdd_reg as e2 ON e1.code_reg=e2.code_reg


et après complexifie.

1
Defouille Messages postés 404 Statut Membre 54
 
Un site en anglais qui explique les outers joins sous Access :

http://office.microsoft.com/en-gb/access-help/creating-an-outer-join-query-in-access-HA001034555.aspx
0
Defouille Messages postés 404 Statut Membre 54
 
Bonjour,

tu pourrais regarder du coté du "LEFT OUTER JOIN".

Au lieu de faire des jointures simples :

FROM effectif_cdd, eff_cdd_reg, eff_cdd_nat, resto 
WHERE (((effectif_cdd.période)=[forms]![choix_période]![trimestre]) AND ((effectif_cdd.code_ens)=[eff_cdd_nat].[code_ens]) AND ((effectif_cdd.code_reg)=[eff_cdd_reg].[code_reg]));


tu le fais avec un "LEFT OUTER JOIN" qui te permet de récupérer aussi les éléments qui ont une valeur vide :

FROM effectif_cdd, eff_cdd_nat, resto 
LEFT OUTER JOIN  eff_cdd_reg ON effectif_cdd.code_reg=[eff_cdd_reg].[code_reg]
WHERE (effectif_cdd.période)=[forms]![choix_période]![trimestre] 
AND effectif_cdd.code_ens=[eff_cdd_nat].[code_ens] 


Je ne connais pas en détail la structure de ta base, mais le principe est là.

En espérant que ça t'aide :)
0
maw
 
Pour commencer, merci d'avoir répondu aussi vite,
quand j'essaie de procéder de la sorte, access me donne un message d'erreur en m'indiquant que la jointure n'est pas supportée...
0
maw
 
je vais essayer, merci beaucoup =)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
maw
 
j'ai fouillé et j'ai trouvé merci beaucoup pour tout, j'avais juste une confusion dans l'ordre de mes left join,
voici ma requête finale qui me renvoit tout =)
SELECT DISTINCTROW effectif_cdd.période, effectif_cdd.code_ens, effectif_cdd.code_reg, effectif_cdd.code_resto,  effectif_cdd.eff_moy_cdi_cdd AS total, eff_cdd_reg.eff_moy_cdi_cdd_reg AS total_reg, eff_cdd_nat.eff_moy_cdi_cdd_nat AS total_nat, eff_moy_cdd/eff_moy_cdi_cdd AS part_cdd, eff_moy_cdd_reg/eff_moy_cdi_cdd_reg AS part_cdd_reg, eff_moy_cdd_nat/eff_moy_cdi_cdd_nat AS part_cdd_nat, eff_moy_tpa_cdd/eff_moy_cdd AS part_tpa, eff_moy_tpa_cdd_reg/eff_moy_cdd_reg AS part_tpa_reg, eff_moy_tpa_cdd_nat/eff_moy_cdd_nat AS part_tpa_nat, eff_moy_tc_cdd/eff_moy_cdd AS part_tc, eff_moy_tc_cdd_reg/eff_moy_cdd_reg AS part_tc_reg, eff_moy_tc_cdd_nat/eff_moy_cdd_nat AS part_tc_nat, eff_moy_tpl_cdd/eff_moy_cdd AS part_tpl, eff_moy_tpl_cdd_reg/eff_moy_cdd_reg AS part_tpl_reg, eff_moy_tpl_cdd_nat/eff_moy_cdd_nat AS part_tpl_nat
FROM eff_cdd_nat LEFT JOIN (effectif_cdd LEFT JOIN eff_cdd_reg ON effectif_cdd.code_reg = eff_cdd_reg.code_reg) ON eff_cdd_nat.code_ens = effectif_cdd.code_ens
WHERE effectif_cdd.période=forms!choix_période!trimestre;
0