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 :

Récupérer ensembles et sous-ensembles


Sujet :

Requêtes et SQL.

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Récupérer ensembles et sous-ensembles
    Bonjour à tous,

    Je ne pense pas que cela soit possible en pur SQL sous Access sans utiliser VBA, mais sait-on jamais.

    J'ai une table table1 qui contient les champs "reference" et "nomenclature".

    Or, certaines nomenclatures peuvent aussi être des références(et donc comporter des sous-nomenclatures)

    Reference nomenclature
    aaaa 123
    aaaa 456
    aaaa 789
    ...
    789 111
    111 222
    333 444
    555 666

    Je voudrais donc récupérer toutes les nomenclatures correspondant à une référence donnée, ainsi que les sous-nomenclatures, c'est à dire, selon l'exemple, en entrant la référence "aaaa", il faudrait que je récupère
    123,456,789,111,222.

    Je pense avoir été clair, mais n'hésitez pas à me demander d'autres explications

    Merci beaucoup d'avance pour votre aide

    Ps: Si impossible en SQL, une idée de la manière dont faire ça en vba sans que ça soit trop lourd?

  2. #2
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    Bonjour,

    J'ai fait un petit test avec des valeurs fictives comme celles que vous mettez, j'ai utilisé l'assistant de requête.
    Il vous suffit de mettre 2 fois votre table et de faire une jointure avec la reference de la 1ère et la nomenclature de la 2ème.
    Cela vous donnera alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Table1_1.nomenclature
    FROM Table1 INNER JOIN Table1 AS Table1_1 ON Table1.reference = Table1_1.nomenclature;
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour !

    Merci pour votre réponse !

    Toutefois j'ai un doute quant à cette requête, à moins que je ne me trompe sur son emploi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table_bis.COMBBB
    FROM table INNER JOIN table AS table_bis ON table.NUMBBB=table_bis.COMBBB
    WHERE table.NUMBBB = "B 0741001";
    Ma clause WHERE est donc ma référence (NUMBBB=reference, COMBBB=nomenclature), mais cette requête me retourne

    COMBBB:
    B 0741001
    B 0741001
    B 0741001
    B 0741001
    ...19 fois

    Une suggestion ?

    Encore merci

  4. #4
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    En fait le résultat veut dire que dans ta table, tu as 19 fois la référence à B 0741001 qui est répétée, cad que tu as :
    -Un certain nombre de fois B 0741001 répété dans la colonne référence.
    -Un certain nombre de fois B 0741001 répété dans la colonne Nomenclature.

    Et donc au total, il se répète 19 fois.

    Alors, le problème est (je pense) que justement tu sélectionnes dans table plutot que dans table_bis la reference, cad :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT table_bis.COMBBB
    FROM table INNER JOIN table AS table_bis ON table.NUMBBB=table_bis.COMBBB
    WHERE table_bis.NUMBBB = "B 0741001";
    A moins que ce qui te pose problème soit justement le fait que tu ais plein de fois la même reference. Et dans ce cas, un simple DISTINCT après ton SELECT arrangera tout.
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  5. #5
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 416
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 416
    Points : 16 259
    Points
    16 259
    Par défaut
    Bonjour

    Ta table a-t-elle une clé primaire et si oui laquelle ?

    Combien de niveaux peut-il y avoir : il faut mettre autant de fois la table que de niveaux inférieurs.

    Il faut sélectionner des champs dans chaque occurrence des tables pour avoir ta liste...
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  6. #6
    Membre actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2011
    Messages : 175
    Points : 223
    Points
    223
    Par défaut
    Ok, je viens de comprendre ce que tu cherches à faire, c'est plus compliqué que ma simple requête. Je pense qu'il faut chercher des requêtes imbriquées plutôt...
    Je vais regarder si j'y arrive.
    Pourquoi faire aujourd'hui ce que l'on peut remettre à demain ?

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    La table a même deux clés primaires, aussi bien la référence que la nomenclature.

    Je ne connais pas le nombre de niveaux car il dépend des produits, pour expliquer concrètement ce que je cherche à faire, je veux, en tapant la référence d'un produit, pouvoir récupérer la liste des pièces qui le compose, sachant que chaque pièce peut parfois elle même être constituée d'autres sous-pièces etc...

    Le problème se corse donc !

  8. #8
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 416
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 416
    Points : 16 259
    Points
    16 259
    Par défaut
    Bonjour

    Donc c'est bien ce que j'indique : il faut ajouter autant de fois la table que de niveaux possibles, prendre le 1er champ de la 1ère occurrence puis prendre à chaque fois le second pour toutes les autres.

    Sinon il faut créer une requête récursive mais à moins que cela soit apparu dans 2010, elle n'existe pas dans Access.

    Vois ce fil qui peut le faire en vba http://loufab.developpez.com/tutorie...ss/recherche1/
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Hmm, donc ne connaissant pas le nombre de niveaux, je n'ai pas d'autres choix que de me tourner vers VBA comme je le craignais...

    A moins que quelqu'un n'ai une autre idée miracle ?

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 416
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 416
    Points : 16 259
    Points
    16 259
    Par défaut
    Bonjour

    Le lien que j'ai indiqué ne correspond pas à ce cas.

    Ne connais-tu pas le nombre maximal de niveaux : ce n'est lié à un ca précis mais au nombre maxi de tes nomenclatures.

    En ORACLE cela correspond à la commande SQL CONNECT BY si cela peut t'aider à googleïser
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Le nombre maximal de niveaux ne doit, à mon avis, pas excéder 20, donc on peut partir sur la base d'une vingtaine, si ça permet d'avoir une solution en SQL !

  12. #12
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 416
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 416
    Points : 16 259
    Points
    16 259
    Par défaut
    Bonjour

    Ne pas oublier d'orienter toutes les relations de la 1ère occurrence vers la dernière.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  13. #13
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Par contre, Access ne semble pas accepter Select.. Connect By, ou alors j'ai fais une recherche trop superficielle :-/

  14. #14
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 416
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 416
    Points : 16 259
    Points
    16 259
    Par défaut
    Re

    C'est ce que je disais à 11h43 en disant que les requêtes récursives n'existent pas dans ACCESS.

    Donc je ne vois que VBA pour produire quelque chose de ce type à part la solution SQL proposée consistant à insérer x fois la table dans la requête.
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  15. #15
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 617
    Points : 56 722
    Points
    56 722
    Billets dans le blog
    40
    Par défaut
    bonsoir,

    je mets un lien vers la discussion ouverte par cléclé64: Arborescence dans un logiciel de gestion de stock

    sujet qui traite également des nomenclatures et des traitements récursifs.

    Pas simple, simple...


    Citation Envoyé par 78chris Voir le message
    Sinon il faut créer une requête récursive mais à moins que cela soit apparu dans 2010, elle n'existe pas dans Access.
    à ce sujet, rien de neuf à l'horizon proposé par Access2010

Discussions similaires

  1. Récupérer le plus récent dans un sous-ensemble
    Par sorcer1 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/03/2015, 08h42
  2. VB Gestion Ensemble et sous Ensemble
    Par Eva01 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2008, 22h43
  3. sous ensemble d'une liste
    Par adel25 dans le forum C++
    Réponses: 1
    Dernier message: 23/08/2005, 15h50
  4. [DBGrid] Affichage d'un sous-ensemble de données
    Par Jean-Jacques Engels dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2004, 16h31
  5. Sous-ensembles de tuples
    Par HPJ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2003, 16h24

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