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

Bases de données Delphi Discussion :

probleme avec une requette sql


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut probleme avec une requette sql
    Salut
    delphi 7,inter-base
    jais deux table,agent(numero_agent,nom,prenom)
    absence(numero_agent,nb_jour,date_du,date_au)
    je veux afficher le nb_jour d'absence pour chaque agent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with ibquery1 do
    begin
    close;
    sql.clear;
    sql.add('select agent.numero_agent,sum(absence.nb_jour) from agent,absence where agent.numero_agent=absence.numero_agent group by agent.numero_agent);
    open;
    end;
    comme ca la requette marche tre bien
    mon problème est si je r'ajoute le nom et le prenom dans cette requette ca ne marche plus un message d'erreur "référence colum invalid"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    with ibquery1 do
    begin
    close;
    sql.clear;
    sql.add('select agent.numero_agent.nom,agent.prenom,agent,sum(absence.nb_jour) from agent,absence where agent.numero_agent=absence.numero_agent group by agent.numero_agent);
    open;
    end;
     
    est ce que vous pouvez m'aider svp car jais besoin vraiment
    merci d'avance

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 577
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    Il faut compléter GROUP BY avec Nom et Prénom.

    Tu en profites pour revoir ta méthode d'établir des requêtes avec jointures.

    Je te joins un exemple pour présenter ta requête. Je n'ai pas tester, mais l'idée est là.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.AGENT_NUMERO, A.NOM, A.PRENOM, SUM(B.NB_JOUR) AS vTotal
    FROM AGENT A
      INNER JOIN ABSENCE B ON B.NUMERO_AGENT = A.NUMERO_AGENT
    GROUP BY A.AGENT_NUMERO, A.NOM, A.PRENOM

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 303
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 303
    Points : 41 790
    Points
    41 790
    Billets dans le blog
    65
    Par défaut
    je suggère plutot un LEFT JOIN à la place du INNER

    pour le GROUP BY , encore plus simple , l'utilisation des numéro de champ dans la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.AGENT_NUMERO, A.NOM, A.PRENOM, SUM(B.NB_JOUR) AS vTotal
    FROM AGENT A
      INNER JOIN ABSENCE B ON B.NUMERO_AGENT = A.NUMERO_AGENT
    GROUP BY 1,2,3
    ce qui peut permettre des choses comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.AGENT_NUMERO, A.NOM||' '|| A.PRENOM AS NOM_ENTIER, SUM(B.NB_JOUR) AS vTotal
    FROM AGENT A
      INNER JOIN ABSENCE B ON B.NUMERO_AGENT = A.NUMERO_AGENT
    GROUP BY 1,2

  4. #4
    Membre confirmé
    Avatar de alheuredudejeuner
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2005
    Messages : 376
    Points : 632
    Points
    632
    Billets dans le blog
    4
    Par défaut il sert à quoi le agent tout seul ?
    il sert à quoi le agent tout seul ?

    André

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    cher ami tu a juste omis agent.nom
    ainsi tu dois mettre a la ligne 6 la requete suivante:
    sql.add('select agent.numero_agent,agent.nom,agent.prenom,sum(absence.nb_jour) from agent,absence where agent.numero_agent=absence.numero_agent group by agent.numero_agent);
    essais et dis nous la suite.
    bonne suite.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 577
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    @SergioMaster

    je suggère plutôt un LEFT JOIN à la place du INNER
    Ce choix dépend de ton objectif, d'accord si tu veux connaître toutes les personnes, même celles qui n'ont aucun jour d'absence. Par contre, il me semble préférable de choir INNER si tu veux simplement présenter les personnes ayant des absences.

    Comme souvent, le choix des commandes est lié au contexte.

    A+

  7. #7
    Membre éclairé

    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2010
    Messages
    297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2010
    Messages : 297
    Points : 705
    Points
    705
    Par défaut
    la réponse de sergio master est la plus complète.

    n'oubliez pas le

  8. #8
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Re
    est si je veux afficher toute les agents mémé celles qui n'ont pas d'absence ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 577
    Points : 1 073
    Points
    1 073
    Par défaut
    Bonjour,

    Re
    est si je veux afficher toute les agents mémé celles qui n'ont pas d'absence ?
    @SergioMaster t'a donné la réponse.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.AGENT_NUMERO, A.NOM, A.PRENOM, SUM(B.NB_JOUR) AS vTotal
    FROM AGENT A
      LEFT JOIN ABSENCE B ON B.NUMERO_AGENT = A.NUMERO_AGENT
    GROUP BY A.AGENT_NUMERO, A.NOM, A.PRENOM
    ou encore

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT A.AGENT_NUMERO, A.NOM, A.PRENOM, SUM(B.NB_JOUR) AS vTotal
    FROM AGENT A
      LEFT JOIN ABSENCE B ON B.NUMERO_AGENT = A.NUMERO_AGENT
    GROUP BY 1,2,3
    Etc.

    Avec les réponses présentes, tu as tous les éléments pour répondre à ta demande.

    Bon courage

    A+

  10. #10
    Membre régulier
    Homme Profil pro
    agent de fisc(les impots)
    Inscrit en
    Juillet 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : agent de fisc(les impots)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 427
    Points : 111
    Points
    111
    Par défaut
    Re
    Merci bien mes frère ces très gentil de votre pare

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

Discussions similaires

  1. probleme avec une requete SQL
    Par univermina dans le forum ASP
    Réponses: 20
    Dernier message: 07/06/2009, 23h24
  2. un souci avec une requette sql
    Par rec82 dans le forum Bases de données
    Réponses: 3
    Dernier message: 16/02/2009, 16h50
  3. Probleme avec une requete sql dans VB6 pour un champ date
    Par jacko842 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2009, 09h31
  4. probleme avec une requete sql
    Par kroma23 dans le forum Bases de données
    Réponses: 18
    Dernier message: 10/01/2009, 15h28
  5. [Oracle 10g]probleme avec une requette sql
    Par ragasy29 dans le forum SQL
    Réponses: 6
    Dernier message: 02/05/2007, 14h45

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