Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2012, 15h28   #1
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 20
Points : 4
Points : 4
Par défaut Probleme avec Group By

Bonjour a tous,

J'ai une requete qui doit me sortir une liste de personne qui sont inviter pour des évenements.

Code :
SELECT Tiers.Nom,Tiers.Prenom,Type_Fonction.nTF FROM Fonctions,Tiers,Type_Fonction where Fonctions.idtF = Tiers.Id and Fonctions.idtyF = Type_Fonction.Id AND Fonctions.vF = 1 Group By Tiers.Nom,Tiers.Prenom
La requete marche bien sans le Group By mais il se peut qu'une personne ait plusieurs invitations. il faudrait qu'elle soit afficher une seule fois d'ou le group by.

Quelqu'un aurait t'il une idée pour afficher une seule fois la personne?

Cordialement

Raf38690
Raf38690 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 16h16   #2
Membre du Club
 
Inscription : juillet 2010
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 56
Points : 52
Points : 52
Si tu utilises Group By, tu dois remplacer le WHERE par HAVING et le mettre à la fin de la requete.

Code :
SELECT Tiers.Nom,Tiers.Prenom,Type_Fonction.nTF FROM Fonctions,Tiers,Type_Fonction  Group By Tiers.Nom,Tiers.Prenom Having Fonctions.idtF = Tiers.Id and Fonctions.idtyF = Type_Fonction.Id AND Fonctions.vF = 1
Je crois que cela devrait fonctionner.
jcdenton057 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 17h06   #3
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 20
Points : 4
Points : 4
Merci beaucoup mais la requete me retourne l'erreur suivante
Vous avez essayé d'executer une requête ne comprenant pas l'expression spécifiée "nTF" comme une partie de la fonction d'agregat.

Comment régler ce probléme ?
Raf38690 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 17h43   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Bonjour Raf38690 et Jcdenton057,

3 petites règles fondamentales, concernant le GROUP BY (ce ne sont pas ls seules) :
  • tous les champs présents dans le SELECT doivent se retrouver dans le GROUP BY (les champs, pas les fonctions de groupe) ;
  • le WHERE effectue les tests AVANT de composer le groupe ;
  • le HAVING effectue les tests APRES avoir composer le groupe (et c'est bien normal).

Donc
Code sql :
1
2
3
4
SELECT   Tiers.Nom,Tiers.Prenom,Type_Fonction.nTF
FROM     Fonctions,Tiers,Type_Fonction
where    Fonctions.idtF = Tiers.Id and Fonctions.idtyF = Type_Fonction.Id AND Fonctions.vF = 1
Group By Tiers.Nom,Tiers.Prenom,Type_Fonction.nTF
devrait fonctionner (en admettant qu'un {Tiers.Nom,Tiers.Prenom} n'a qu'un seul {Type_Fonction.nTF} (et là, je sens qu'il va y avoir une suite... )

D'autre part, il vaut mieux créer des jointures (JOIN) que de les simuler par la clause WHERE. Mais, c'est une autre histoire...

Raf38690, je te suggère d'utiliser l'assistant "création de requête", il est très clair.


@jcdenton057 :
Code sql :
1
2
3
4
SELECT   Tiers.Nom,Tiers.Prenom,Type_Fonction.nTF
FROM     Fonctions,Tiers,Type_Fonction
Group By Tiers.Nom,Tiers.Prenom, Type_Fonction.nTF
Having   Fonctions.idtF = Tiers.Id and Fonctions.idtyF = Type_Fonction.Id AND Fonctions.vF = 1
==> même combat pour la liste des champs et pour les jointures. Pour le HAVING, tu demandes à ACCESS d'effectuer le groupage et, ensuite, d'exclure des enregistrements : il vaut mieux les exclure avant ! (avec un WHERE).
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 18h14   #5
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 20
Points : 4
Points : 4
Merci beaucoup Richard_35

Mais comme tu l'as dit, dans mon cas {Tiers.Nom,Tiers.Prenom} peut avoir plusieurs fonctions.

Comment faire pour en afficher qu'une seule fonction ?
Raf38690 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/01/2012, 18h21   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
Nous y voilà...

Citation:
Envoyé par Raf38690
Comment faire pour en afficher qu'une seule fonction ?
==> laquelle veux-tu ?
Autrement dit, quel est ton critère de sélection, s'il y a plusieurs fonctions ?

S'il s'agit de la première, dans l'ordre alphabétique, alors
SELECT Tiers.Nom,Tiers.Prenom,min(Type_Fonction.nTF)
avec
GROUP BY Tiers.Nom,Tiers.Prenom
devrait fonctionner.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 09h57   #7
Invité de passage
 
Homme
Étudiant
Inscription : octobre 2011
Messages : 20
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2011
Messages : 20
Points : 4
Points : 4
merci beaucoup Richard_35,

je n'avais pas pensé a faire un min sur Type_Fonction.nTF

Merci beaucoup pour ton aide

Cordialement

Raf38690
Raf38690 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h40.


 
 
 
 
Partenaires

Hébergement Web