IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Probleme avec Group By [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 9
    Points
    9
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 56
    Points : 67
    Points
    67
    Par défaut
    Si tu utilises Group By, tu dois remplacer le WHERE par HAVING et le mettre à la fin de la requete.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 9
    Points
    9
    Par défaut
    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 ?

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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).

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 9
    Points
    9
    Par défaut
    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 ?

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    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.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    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 : 9
    Points
    9
    Par défaut
    merci beaucoup Richard_35,

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

    Merci beaucoup pour ton aide

    Cordialement

    Raf38690

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec group by dans un bloc anonyme
    Par lucaazori1988 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/05/2010, 15h09
  2. Probleme avec group by
    Par ddove53 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 27/01/2010, 12h24
  3. Probleme avec GROUP BY
    Par Keweed dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/04/2009, 08h59
  4. probleme avec group by
    Par brudao dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/01/2009, 14h50
  5. probleme avec group by
    Par dirtyjs dans le forum Access
    Réponses: 1
    Dernier message: 01/09/2006, 04h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo