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 :

Requête avec jointure entre 3 tables


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Requête avec jointure entre 3 tables
    Bonjour,

    Je suis très moyen en SQL et me heurte au problème suivant.

    Ma requête ci-dessous me renvoie des valeurs multipliées par le nombre d'enregistrements trouvés dans la 3e table nommée "GESTION".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT (SUM(DEMANDE.JDemandeRTT) + SUM(DEMANDE.JDemandeCA) + SUM(DEMANDE.JDemandeHS)) - (SUM(GESTION.Indemnise) + SUM(GESTION.Rafp))AS TxNb
    FROM (AGENT LEFT JOIN DEMANDE ON AGENT.RefAgent = DEMANDE.RefAgent) RIGHT JOIN GESTION ON AGENT.RefAgent = GESTION.RefAgent
    WHERE AGENT.DateFermeture IS NULL
    GROUP BY AGENT.Matricule
    ORDER BY AGENT.Matricule;
    J'avoue que je ne sais pas me sortir de cette situation attendu mes petites connaissances en SQL. J'ai bien tenté de modifier les types de jointure ...en vain.
    Merci des conseils que vous voudrez bien me donner.

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour et ,

    Utilise plutôt l'interface QBE prévue par Access et lis ce tutoriel qui t'aidera sûrement à mieux comprendre : Créer des requêtes simples (Jean Ballat)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Merci,

    J'ai donc parcouru le tutoriel et utilisé le QBE pour arriver ...aux mêmes résultats erronés. Ce que je ne saisis pas, c'est pourquoi, lorsque je fais uniquement la première ou seconde jointure, j'ai des résultats corrects ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT (Sum(DEMANDE.JDemandeRTT)+Sum(DEMANDE.JDemandeCA)+Sum(DEMANDE.JDemandeHS)) AS CET2
    FROM AGENT RIGHT JOIN DEMANDE ON AGENT.RefAgent = DEMANDE.RefAgent
    WHERE AGENT.DateFermeture) Is Null
    GROUP BY AGENT.Matricule
    ORDER BY Matricule;
    Avec cette requête, un agent témoin a la valeur 38 dans le champ nommé ici CET2. C'est la bonne valeur.

    Alors que me me retrouve avec deux fois 38 et deux fois le résultat de la seconde jointure (CET4) lorsque je l'ajoute, donc toutes les valeurs sont doublées :
    Matricule CET2 CET4
    1234567 38 {vide}
    1234567 {vide} 6
    1234567 {vide} 6
    1234567 38 {vide}

    J'ai aussi essayé avec UNION, les résultats sont justes mais je me retrouve avec 2 lignes par agent (une par requête) avec un champs vide en alternance, comme ceci.
    Matricule CET2 CET4
    1234567 38 {vide}
    1234567 {vide} 6
    Peut-être quelqu'un pourrait m'indiquer un moyen simple ensuite de réduire les lignes ?

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Si tu veux un coup de main, mets tes tables dans la BdD en annexe et reposte en expliquant ce que tu veux comme résultat.

    N.B. J'utilise Access2000, donc j'ai besoin d'un fichier .mdb.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2014
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2014
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par ClaudeLELOUP Voir le message
    Si tu veux un coup de main, mets tes tables dans la BdD en annexe et reposte en expliquant ce que tu veux comme résultat.

    N.B. J'utilise Access2000, donc j'ai besoin d'un fichier .mdb.
    Merci, je reviens un peu plus tard dans la matinée avec les tables demandées.

    Un peu plus tard :
    Enfin trouvée, la raison est plutôt simple : J'ai pris les infos à traiter dans la seconde requête alors que ces calculs sont déjà effectués au sein de la seconde table et je prenais les mauvais champs...
    Aussi, la seconde requête est la seule jointure que je dois faire avec la première requête, trouve parfois plusieurs entrées (une par année depuis la mise en place de ce système en 2012) par agent concerné, donc en résultat elle renvoie une ligne par enregistrement trouvé, il me suffit de cumuler ces valeurs et d'effectuer la soustraction à ce niveau.

    Désolé de cette sollicitation vaine, et surtout merci de ta disponibilité.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/09/2013, 10h17
  2. Réponses: 4
    Dernier message: 17/05/2013, 14h18
  3. [XL-2007] Problème Requête avec Jointure de plusieurs Tables VBA
    Par fleur_d_eden dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/05/2012, 11h03
  4. Réponses: 5
    Dernier message: 09/03/2012, 10h31
  5. [Débutant] select avec jointure entre 4 tables
    Par ulyssemac dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/11/2007, 19h39

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