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

Langage SQL Discussion :

[Access] Erreur fonction agrégat


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut [Access] Erreur fonction agrégat
    Bonjour,

    J'ai une érreur lorsque je fais cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT EnteteFacture.Date, client.FacTel, client.FacNom, client.FacAdr, client.FacSuiteAdr, client.FacCp, client.FacVille, client.FacEMail, EnteteFacture.CodeTiers
    FROM EnteteFacture, client
    GROUP BY EnteteFacture.CodeTiers
    HAVING client.Code=entetefacture.codetiers
    AND EnteteFacture.Date>#1/1/2005#
    AND FacTel<>''
    AND entetefacture.Depot='DP'
    ORDER BY EnteteFacture.Date DESC;
    Quelqu'un aurais une idée sur l'erreur car moi je ne trouve pas.


    Merci

  2. #2
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Tu n'utilises aucune fonction d'agrégation dans ta requete.
    Fonction d'agrégation = SUM, MAX, MIN, AVG, ...

    La tu fais une requête simple avec une jointure, donc le GROUP BY et le HAVING n'ont pas lieu d'être.

    essaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT EnteteFacture.Date, client.FacTel, client.FacNom, client.FacAdr, client.FacSuiteAdr, client.FacCp, client.FacVille, client.FacEMail, EnteteFacture.CodeTiers
    FROM EnteteFacture inner join  client on (client.Code=entetefacture.codetiers)
    where EnteteFacture.Date>#1/1/2005#
    AND FacTel<>''
    AND entetefacture.Depot='DP'
    ORDER BY EnteteFacture.Date DESC;
    Bon courage

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Ton code marche mais ca n'affiche pas ce que je veux, je veux que ca m'affiche le codeclient avec la date de ca dernière factures. Car dans la table EnteteFacture il y à plusieurs fois le même code client avec des dates de factures différentes.

    C'est pour cela que je fesais un group by sur les codetiers (codeclient).
    Tu vois ce que je veux dire?

    Est ce que c'est réalisable?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 493
    Points
    28 493
    Par défaut
    Voici la structure de requête pour extraire la ligne correspondant à la date la plus récente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  t1.*
    FROM    matable AS t1
    WHERE   EXISTS
            (   SELECT  1
                FROM    matable AS t2
                WHERE   t1.id_groupe = t2.id_groupe
                HAVING  t1.col_date = MAX(t2.col_date)  
            )
    ;
    Je te laisse l'adapter à ton cas...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Ok je vais voir ca de plus pres car j'ai pas très bien compris ton code

  6. #6
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Alors il faut utiliser la fonction d'aggrégation MAX sur la date de facturation et grouper le resultat par l'identifiant client

    Bon courage

Discussions similaires

  1. erreur requête fonction agrégat
    Par agnaou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2009, 04h35
  2. [A-07] SQL erreur fonction agrégat compte max
    Par chus03 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 27/12/2008, 22h53
  3. Erreur fonction d'agrégation
    Par afrodje dans le forum Développement
    Réponses: 2
    Dernier message: 21/12/2008, 15h15
  4. Message d'erreur requête fonction agrégat
    Par luke80 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 06/04/2008, 18h58
  5. méssage d'erreur fonction d'agrégat
    Par developpeur_mehdi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 10/03/2004, 13h42

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