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 :

Difficulté de creation d'une Union entre 3 requetes


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut Difficulté de creation d'une Union entre 3 requetes
    Bonjour tout le monde,

    après avoir consulté les différents posts concernants la création d'union entre requetes, je me retrouve toujours dans une impasse...

    je vous expose mon soucis, en espérant etre clair....

    Je dispose de 3 tables : Customer_GTCH1, Customer_GTCH2 et Customer_FT

    Ces 3 tables disposent de :
    • un champ Customer code : il s'agit de l'identifiant de chaque client
    • un champ "check label" qui est différent dans chacune des tables


    Pour chacune ces tables, j'ai créé une requete qui me permet, en renseignant le code d'un client, d'avoir la liste des checks a faire pour ce client.

    Chacune de ces requete fonctionne correctement.

    Ce que je souhaiterai faire :

    Créer une requete (union?) que me permette, en renseignant 1 seule fois le code client, d'avoir les listes des checks obtenu par les 3 requetes indépendantes.

    Est ce que quelqu'un pourrait m'aider à créer une telle requete?

    Pour info, j'utilise ACCESS 2000

    Merci pour l'aide

    Guillaume

  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 : 78
    Localisation : Belgique

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 282 192
    Points
    282 192
    Par défaut
    Voici une recette pour fusionner tes 3 requêtes (si elles sont "fusionnables"!)

    1° Tu crées une 4 ème requête par copie de la 1ere
    2° Dans le sql, tu supprimes le ; final et tu ajoute un espace, puis UNION puis espace.
    3° Tu copies à la suite le sql de la 2ème requête
    4° tu refais comme au 2°
    5° tu copies à la suite le sql de ta dernière requête (ici la 3eme). Cette fois tu laisses le ; final.

    Si tes requêtes "primaires" sont toutes de même structure (nbre de champs et types) cela devrait marcher.
    Bonne chance
    SVP ne m'envoyez pas de messages privés pour poser des questions techniques, vous n'aurez pas de réponse !

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut Pièce jointe à consulter SVP!!! Merci
    Bonjour ClaudeLELOUP et merci pour cette réponse rapide!!

    je vais tester cela tout de suite.

    En attendant, j'ai pris le temps de faire un petit powerpoint expliquant au mieux ce que je souhaite faire, cela confirmera très certainement la solution que tu viens d'apporter.

    Merci encore
    Guillaume
    Fichiers attachés Fichiers attachés

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut ça marche...enfin presque....
    Me revoilà après avoir essayé la solution apportée par ClaudeLELOUP!!

    J'ai écrit ce code SQL dans ma requete :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH1_ADD_CHECKS_Requests.[GT CH1 additional check]
    FROM T_CUSTOMER INNER JOIN T_GT_CH1_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_GT_CH1_ADD_CHECKS_Requests.[IATA Code]
    UNION
    SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH2_ADD_CHECKS_Requests.[GT CH2 add check]
    FROM T_CUSTOMER INNER JOIN T_GT_CH2_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_GT_CH2_ADD_CHECKS_Requests.[IATA Code]
    UNION SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_FT_ADD_CHECKS_Requests.[FT add check]
    FROM T_CUSTOMER INNER JOIN T_FT_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_FT_ADD_CHECKS_Requests.[IATA Code]
    WHERE (((T_CUSTOMER.[IATA Code])=[Enter Customer IATA Code :]));

    Malheureusement, au lieu d'avoir 5 colonnes (IATA CODE, Customer name, GTCH1, GTCH2 et FT) j'en ai que 3 dont GTCH1 dans laquelle toutes les checks de sont regroupées (ce qui n'est pas bon du tout...) : screenshot en pièce jointe.

    Sachant que des champs peuvent etre vides (d'ou l'erreur d'affichage?) quelle est la modif a apporter pour ne plus avoir ce soucis?

    Merci pour votre aide
    Guillaume
    Images attachées Images attachées  

  5. #5
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour,

    La solution "UNION" ne me semble pas approprié.

    Utiliser les tables dérivées en choisissant les champs correspondant aux colonnes de Customer_GTCH1, puis de Customer_GTCH2 et dans la principale Customer_FT. Cela devrait fonctionner.
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  6. #6
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut euh...
    Je ne comprend pas completement ta proposition...

    qu'entends-tu par tables dérivées?

    par quel moyen pourrait-on tester la présence ou non de checks dans une catégorie (GTCH1, GTCH2, FT) en focntion du client?

    peut-on faire ça directement dans un formulaire ?

    On renseigne dans le formulaire principal le code client et ensuite des sous formulaires utilisent cette entrée pour afficher (ou non) les checks?

    Merci et bon appétit ^^

    Guillaume

  7. #7
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Les tables dérivées ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T1.champs1, T2 .champs2
     
    FROM
           (SELECT...
                         ) T1,
           (SELECT...
                         ) T2
     
    -- Et tu finis...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut
    Bon je vais essayer, je reviendrai pour dire si j'ai reussi ou pas...

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut Probleme de code SQL....:oops:
    Chtulus, j'ai essayé de mettre en oeuvre ta proposition de code, et j'ai une erreur "error in FROM syntax"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH1_ADD_CHECKS_Requests.[GT CH1 additional check],T_GT_CH2_ADD_CHECKS_Requests.[GT CH2 add check], T_FT_ADD_CHECKS_Requests.[FT add check]
     
    FROM 
    (SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_FT_ADD_CHECKS_Requests.[FT add check]
    FROM T_CUSTOMER INNER JOIN T_FT_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_FT_ADD_CHECKS_Requests.[IATA Code]) T_FT_ADD_CHECKS_Requests,
     
    (SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH1_ADD_CHECKS_Requests.[GT CH1 additional check]
    FROM T_CUSTOMER INNER JOIN T_GT_CH1_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_GT_CH1_ADD_CHECKS_Requests.[IATA Code]) T_GT_CH1_ADD_CHECKS_Requests,
     
    (SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH2_ADD_CHECKS_Requests.[GT CH2 add check]
    FROM T_CUSTOMER INNER JOIN T_GT_CH2_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_GT_CH2_ADD_CHECKS_Requests.[IATA Code]) T_GT_CH2_ADD_CHECKS_Requests,
     
    WHERE (((T_CUSTOMER.[IATA Code])=[Enter Customer IATA Code :]));
    Je sais que je ne suis pas méga expérimenté en SQL, aussi je ne sais pas trop ce qui est erroné...

    Merci du coup de main!!

  10. #10
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Ah, par contre c'est vrai que je n'ai jamais essayer avec 3 tables...

    Essaie de faire un test juste avec 2...

    Sinon vu le nombre de parenthésage dans la clause WHERE, je suppose que tu es avec SQL en assistant access...
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut encore un echec...
    Salut,

    bon après avoir retiré une sous requete et après avoir rajouté des parenthèses pour la clause FROM globale, j'ai de nouveau une erreur, mais cette fois dans la syntaxe "JOIN". Mais je ne sais pas d'ou cela provient...

    le code est le suivant :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH1_ADD_CHECKS_Requests.[GT CH1 additional check], T_GT_CH2_ADD_CHECKS_Requests.[GT CH2 add check], T_FT_ADD_CHECKS_Requests.[FT add check]
     
    FROM 
    ((SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_FT_ADD_CHECKS_Requests.[FT add check]
    FROM T_CUSTOMER INNER JOIN T_FT_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_FT_ADD_CHECKS_Requests.[IATA Code]) T_FT_ADD_CHECKS_Requests,
     
    (SELECT T_CUSTOMER.[IATA Code], T_CUSTOMER.[Customer name], T_GT_CH1_ADD_CHECKS_Requests.[GT CH1 additional check]
    FROM T_CUSTOMER INNER JOIN T_GT_CH1_ADD_CHECKS_Requests ON T_CUSTOMER.[IATA Code] = T_GT_CH1_ADD_CHECKS_Requests.[IATA Code]) T_GT_CH1_ADD_CHECKS_Requests) ,
     
    WHERE (((T_CUSTOMER.[IATA Code])=[Enter Customer IATA Code :]));

    Vos lumières/suggestions:critiques sont toutes les bienvenues!!!

    Merci
    Guillaume

  12. #12
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Il te mets quoi comme erreur exactement.

    Tes liens semble bon, tu n'a pas de problème dans tes noms.
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  13. #13
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2007
    Messages : 69
    Points : 32
    Points
    32
    Par défaut
    Il me met comme erreur "Error in JOIN syntax"
    c'est tout...

  14. #14
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Et si tu enleve la virgule après

    Requests.[IATA Code]) T_GT_CH1_ADD_CHECKS_Requests) ,
    Et que tu rajoute une parenthèse après IATA code.

    (Personnel mais toi aussi tiens tu utilises des codes IATA, j'avais pas tilté)
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



Discussions similaires

  1. Optimisation de l'union entre deux requetes
    Par fetano dans le forum Débuter
    Réponses: 5
    Dernier message: 21/09/2014, 14h51
  2. Comment faire une union de 4 requetes ?
    Par artacus dans le forum Cognos
    Réponses: 2
    Dernier message: 08/01/2009, 11h27
  3. Partage d'une constante entre 2 fichiers en C
    Par elsargento dans le forum C
    Réponses: 6
    Dernier message: 29/09/2003, 22h17
  4. creation d'une raccourcie dans le menu demarre
    Par kenshi dans le forum MFC
    Réponses: 14
    Dernier message: 11/09/2003, 14h59
  5. Creation d une clee dans la registry en VC++
    Par rico27fr dans le forum MFC
    Réponses: 4
    Dernier message: 30/05/2002, 12h36

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