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 -
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
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
A voir également:
- Requete dans tables liées
- Tables des matières word - Guide
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Difficulté avec requête SQLite ✓ - Forum Android
- Requête bloquée par le pare-feu applicatif claranet webfence ✓ - Forum Réseaux sociaux
6 réponses
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
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
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
voici le lien (valable 4 jours)
https://www.cjoint.com/?3AhmSaHTstz
merci de votre aide. je sèche vraiment
bonne journée
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.
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
Merci
a bientôt
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, ..."
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, ..."