Requete dans tables liées

chepa10 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
Tessel75 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je travaille sur ACCESS 2007 sur WINDOWS 7

J'ai créé une BD avec 6 tables ( 1 + 5). la relation est chaque fois de 1 à plusieurs

la table MERE s'appelle "T_donnees_employes"
et se lie par le champ NUM_EMPLOYE à la table T_contrat ( de 1 à plusieurs)


j'essaye de créer un requête où je filtrerai pour certains employés, leur dernier contrat en date ( date de début, date de fin, type de contrat) de la table T_contrat

et j'aurais le nom, prénom et num à partir de la table T_donnees_employée

J'essaye avec les fonctions regroupement et max mais ça ne marche pas... s'il filtre correctement le champ date de début, il ne prend pas le corespondant dans date de fin et dans type de contrat

voici la syntaxe SQL générée par ACCESS

SELECT T_donnees_employes.NUM_EMPLOYE, T_donnees_employes.NUM_PARTENA, T_donnees_employes.NOM, T_donnees_employes.PRENOM, Max(T_contrat.TYPE_CONTRAT) AS MaxDeTYPE_CONTRAT, Max(T_contrat.DATE_DEB) AS MaxDeDATE_DEB, Max(T_contrat.DATE_FIN) AS MaxDeDATE_FIN
FROM T_donnees_employes INNER JOIN T_contrat ON T_donnees_employes.[NUM_EMPLOYE] = T_contrat.[NUM_EMPLOYE]
GROUP BY T_donnees_employes.NUM_EMPLOYE, T_donnees_employes.NUM_PARTENA, T_donnees_employes.NOM, T_donnees_employes.PRENOM
HAVING (((T_donnees_employes.NUM_EMPLOYE)=4 Or (T_donnees_employes.NUM_EMPLOYE)=5 Or (T_donnees_employes.NUM_EMPLOYE)=21 Or (T_donnees_employes.NUM_EMPLOYE)=24 Or (T_donnees_employes.NUM_EMPLOYE)=14 Or (T_donnees_employes.NUM_EMPLOYE)=15 Or (T_donnees_employes.NUM_EMPLOYE)=17));



Merci d'avance pour votre aide

6 réponses

Tessel75 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   22
 
Bonsoir et bonne année,
Désolé de ne pas savoir lire telle quelle une requête en SQL.
Merci d'envoyer un extrait de la base avec les tables concernées et l'enregistrement de la requête en mode "normal". Je pourrai regarder.
C'est vrai qu'avec les opérations de regroupement on a souvent des mauvaises surprises et des difficultés à obtenir ce qu'on veut.
A plus tard, avec un lien cjoint.com
0
chepa10 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour et bonne année également

voici le lien (valable 4 jours)

https://www.cjoint.com/?3AhmSaHTstz

merci de votre aide. je sèche vraiment

bonne journée
0
Tessel75 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   22
 
https://www.cjoint.com/?3AhvUkv2jnU

Bonsoir,
"Rien n'est plus idiot qu'un ordinateur, mais il le fait vite et bien"

Ton erreur venait de ce que ta requête demandait la dernière, ou la plus grande, des dates de début de contrats pour chacun des employés, puis la dernière, ou la plus grande, des dates d fin de contrats, puis le dernier, ou le plus grand, des types de contrats, etc. Ce que l'ordinateur t'as fidèlement servi.
En fait pour ce que tu demandes, il te faut 2 requêtes enchaînées. La 1ère pour déterminer quel contrat, son N°, ou son type, ou sa date, peu importe quoi, c'est toi qui le détermines. Puis la 2ème pour sortir les autres éléments du contrat que tu as sélectionné avec la 1ère requête.
En regardant mon exemple tu verra comment j'ai pu procéder.
A voir dans l'ordre CopierR_lastDATE_DEB0 et CopieR_lastDATE_DEB1
En espérant avoir résolu ta difficulté. Je peux te répondre si tu as encore des points qui te paraissent obscurs
Bonne continuation. Et meilleurs voeux.
0
chepa10 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour

Un grand merci! j'ai effectivement remarqué que ça fonctionne dans l'exemple envoyé mais snifff chez moi, ça ne marche pas. Est-ce que c'est un bug?

en gros, la deuxième requête renvoie tous les contrats et pas le dernier malgré le fait que j'ai suivi strictement à la lettre votre exemple.

j'ai donc 6 lignes pour une personne au lieu d'une ligne (1 enregistrement = le dernier contrat /par personne).

la première requête fonctionne (je l'ai également faite sur ID_Contrat)

Est-ce que le bug serait dans les tables de départ?

Merci encore pour votre aide

Bonne journée
0

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

Posez votre question
chepa10 Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
Je crois que j'ai trouvé la solution. Il fallait changer la relation entre la première requête et la table contrat.

Merci

a bientôt
0
Tessel75 Messages postés 192 Date d'inscription   Statut Membre Dernière intervention   22
 
Bonjour,
Je suis très étonné de ta réponse; à vrai dire je n'en crois rien. Je ne pense absolument pas qu'il s'agisse d'une question de relation entre la requête0 et la table T_Contrat, parce que ce n'est pas possible. Si ta 1ère Requête (Requête0) ramène un et un seul contrat pour chaque personne, il n'y a aucune raison que la 2ème ramène plusieurs dates de début de contrat, ou de N°Contrat lorsque tu lances celle-ci.
Il faut alors que tu revois comment est construite ta 1ère requête. pour ce que tu cherches à faire, il est impératif que ta 1ère requête ne te ramène qu'un seul contrat, ou bien elle ne va pas; elle est fausse. J'insiste, c'est ta 1ère requête qui doit sélectionner ton MaxdeQqChose ou ton DernierDeQqChose. Alors tu verras que tu obtiens la même chose que moi.
NB: juste un détail pratique que j'ai omis de signaler hier. Il n'est pas du tout nécessaire d'ouvrir la 1ère Requête pour ouvrir la 2ème, Access s'en charge tout seul. C'est très pratique lorsque tu as besoin d'ouvrir un formulaire ou un état dont la source est cette 2ème requête. Je ne sais pas si tu le savais déjà.
Courage. Avec de la persévérance on arrive toujours à bout d'un ordinateur. "il n'y a rien de plus stupide qu'un ordinateur, ..."
0