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 :

Problème avec UNION ALL


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut Problème avec UNION ALL
    Bonjour,

    j'ai agrégé 2 tables dont les valeurs sont numériques. chacunes des colonnes de ces tables est construit en faisant des listes déroulantes vers la clé primaire d'une autre table mais en affichant la 2eme colonne disons l'article correspondant à la clé primaire. Mon problème est le suivant:

    lorsque je fais un UNION ALL au lieu de voir la valeur des articles je vois la clé primaire correspondant à mon article.

    Auriez vous une solution.

    Merci d'avance
    Karim

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Votre problème n'est pas clair du tout.

    Postez la/les requete(s) que vous avez écrite(s) et dites nous en quoi elles ne vous conviennent pas.

  3. #3
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    La requete rProduitsEtatStock est l'union de rProduitsInv et de rProduitsEnt.
    J'ai calculé un stock de produit sur la base d'un inventaire (inventaire + entree après inventaire - sortie après inventaire) mais comme je suis dans la mise en oeuvre du fichier il y a des produits qui sont dans inventaire (rProduitsInv ) et qui ne sont pas dans entrée (rProduitsEnt).

    Mon SQL est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT T.produit, T.transfo, T.calibre, T.qualite, T.carton, T.elmtCarton, ProdStockADate([produit],[transfo],[calibre],[qualite],[carton],[elmtCarton],Date()) AS StockProduits
    FROM (SELECT produit, transfo, calibre, qualite, carton, elmtCarton FROM rProduitsEnt
    UNION  ALL SELECT produit, transfo, calibre, qualite, carton, elmtCarton FROM tProduitsInv)  AS T
    GROUP BY T.produit, T.transfo, T.calibre, T.qualite, T.carton, T.elmtCarton
    HAVING (((ProdStockADate([produit],[transfo],[calibre],[qualite],[carton],[elmtCarton],Date()))<>0))
    ORDER BY T.produit, T.transfo, T.calibre, T.qualite, T.carton, T.elmtCarton;
    Le point c'est que si par exemple on prends la colonne produit de la table tProduitsInv, il affiche "brotule" sur la 1ere ligne mais en fait c'est numérique "1". J'ai fait une liste déroulante avec relation une à plusieurs vers la table tProduits. il pointe donc sur la clé primaire mais affiche la 2eme colonne "produit". J'espère avoir été plus clair.

    Nom : tProduitInv.png
Affichages : 532
Taille : 162,5 Ko
    Nom : rProduitsEnt.png
Affichages : 541
Taille : 167,8 Ko
    Nom : rProduitsEtatStock2.png
Affichages : 532
Taille : 127,6 Ko
    Nom : tProduits.png
Affichages : 535
Taille : 129,1 Ko

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Pourquoi vous compliquez autant ?
    Je vois pas trop l'utilité du sous-select, et je ne sais pas ce que fait votre fonction...
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    Laissons tomber la fonction, si je fais le code suivant

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT produit, transfo, calibre, qualite, carton, elmtCarton FROM rProduitsEnt
    UNION  ALL SELECT produit, transfo, calibre, qualite, carton, elmtCarton FROM tProduitsInv

    Le résultat me donne quelquechose qui ressemble au 6 premières colonnes de la requête rProduitsEtatStock2. Je me retrouve avec une version numérique et pas texte des colonnes produit, transfo, calibre, qualite, carton, elmtCarton. Je souhaiterai avoir la version texte comme sur les tables rProduitsEnt et tProduitsInv.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Le point c'est que si par exemple on prends la colonne produit de la table tProduitsInv, il affiche "brotule" sur la 1ere ligne mais en fait c'est numérique "1". J'ai fait une liste déroulante avec relation une à plusieurs vers la table tProduits. il pointe donc sur la clé primaire mais affiche la 2eme colonne "produit". J'espère avoir été plus clair.
    bonjour,
    c'est typique de cette habitude d'afficher le libellé à la place du code dans les tables,c'est bien pratique mais cela a aussi ses contraintes...
    Il faut ajouter la table contenant les libellés et faire une jointure pour les afficher à la place du code, je suppose que tu sais faire cela.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    non je suis encore débutant. je ne vois pas comment le faire car chacune des colonnes (produit, transfo, calibre, qualite, carton, elmtCarton) pointent vers une table différente. tu pourrais me faire un petit exemple stp je devrais pouvoir l'adapter à mon cas.

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Personnellement je suggère de faire la requête et ensuite de présenter les résultat dans un formulaire en utilisant des listes déroulantes.
    Ça va éviter les jointures qui sont toujours un peu lourde et parfois délicates.
    Aussi pour l'écriture des requêtes union, je fais ceci :

    • 1 requête par source (ex : R1, R2, R3).
      Cela me permet de valider et de mettre au point chaque requête indépendamment des autres.
    • 1 requête union du type :
      Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
       
      select [r1].* from [r1]
      union all select [r2.* from [r2
      union all select [r3].* from [r3]


    Je trouve cela plus facile à mettre au point et à maintenir.
    Cela permet notamment de trouver rapidement la source de l'erreur classique où une des requêtes n'a pas le même nombre de champs que les autres.

    Un dernier point à propos des requêtes union :
    En interne Access semble accoler les champs de chacune des requêtes et il peut atteindre le maximum qui est de 255 champs par requête.
    Ce qui veut dire que si on a par exemple 3 requêtes avec 100 champs, la requête union va avoir 300 champs.
    Évidement Access ne le dit pas. Il va renvoyer une erreur comme quoi il n'est pas capable de faire la jointure ou une autre erreur qui n'a rien à voir avec le vrai problème.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    je ne vois pas non plus. bon normalement ma requête est faite (rProduitsEtatStock2). Si je fais un formulaire dessus comment je lui dis de m'afficher le texte et non le numérique. Dans le formulaire, je souhaiterai avoir un tableau avec le stock de tout mes produits plutôt qu'une liste déroulante.

    Mais bon c'est quand même étrange que le UNION ALL supprime la propriétés "texte" au lieu de "numérique" affichées dans les tables/requetes dont on veux faire l'union...

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Bonsoir,
    Mais bon c'est quand même étrange que le UNION ALL supprime la propriétés "texte" au lieu de "numérique" affichées dans les tables/requetes dont on veux faire l'union...
    Malheureusement, avec ce type de requête, Acces est obligé de prendre la donnée d'origine et pas son interprétation graphique.

    Il ne faut pas oublier que cette possibilité (qui, soit dit en passant, n'est pas "SQL standard") d'afficher un libellé à la place d'un code fonctionne un peu comme un formatage de données, par exemple une date est stockée sous forme numérique mais on la voit sous un format lisible (exemple: jj/mm/aaaa).
    Sauf que, un champ de type date, Access le gère de manière constante via une fonction intégrée, car il sait qu'il doit le faire pour ce type, ce qui n'est pas le cas pour des "données clients".

    Pour t'en sortir, tu n'as pas d'autre choix que d'ajouter la table contenant les libellés de chaque colonne.
    Je te donne un exemple pour afficher les libellés produit et transformation de la table tProduitsInv. Il faut ajouter les tables tProduits et tTransformation et en supposant que les noms des champs que j'ai mis pour faire les jointures sont corrects :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT tProduits.produit, tTransformation.transfo
    FROM (tproduitsInv INNER JOIN tProduits ON tproduitsInv.produit = tProduits.noproduit) INNER JOIN tTransformation ON tproduitsInv.transfo = tTransformation.notransfo;

    Et il faudra ajouter autant de tables qu'il y a de libellés à faire apparaitre.
    Note qu'il y a la possibilité de le faire en dernier lieu c'est à dire, une fois la requête UNION terminée et enregistrée, créer une nouvelle requête contenant la requête UNION et les tables des libellés. Utilise l'interface graphique de création de requêtes pour faire les jointures plutôt que le mode SQL, c'est beaucoup plus facile.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  11. #11
    Membre à l'essai
    Homme Profil pro
    entrepreneur
    Inscrit en
    Juillet 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : entrepreneur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 29
    Points : 10
    Points
    10
    Par défaut
    Super ça marche.
    Merci de votre aide

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

Discussions similaires

  1. Problème avec UNION ALL
    Par omzo86 dans le forum Access
    Réponses: 4
    Dernier message: 02/06/2016, 17h50
  2. problème avec UNION SQL
    Par greg1517 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 06/05/2007, 19h46
  3. Illegal mix of collations avec UNION ALL
    Par lodan dans le forum Outils
    Réponses: 1
    Dernier message: 03/05/2007, 18h05
  4. Problème avec UNION et Group by
    Par dujardin dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/02/2007, 04h55
  5. Problème avec UNION et WHERE
    Par portu dans le forum Langage SQL
    Réponses: 13
    Dernier message: 20/04/2005, 11h29

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