Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/06/2011, 08h41   #1
Invité de passage
 
Étudiant
Inscription : février 2008
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 6
Points : 0
Points : 0
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?
killerthibs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 09h39   #2
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
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 :
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 ?
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 10h45   #3
Invité de passage
 
Étudiant
Inscription : février 2008
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 6
Points : 0
Points : 0
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 :
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
killerthibs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h10   #4
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
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 :
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 ?
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h14   #5
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 583
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 583
Points : 885
Points : 885
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...
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h18   #6
Membre actif
 
Homme Quentin D.
Étudiant
Inscription : avril 2011
Messages : 175
Détails du profil
Informations personnelles :
Nom : Homme Quentin D.
Âge : 25
Localisation : France, Moselle (Lorraine)

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : avril 2011
Messages : 175
Points : 165
Points : 165
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 ?
Nitromard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h31   #7
Invité de passage
 
Étudiant
Inscription : février 2008
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 6
Points : 0
Points : 0
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 !
killerthibs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h43   #8
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 583
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 583
Points : 885
Points : 885
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/
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 11h53   #9
Invité de passage
 
Étudiant
Inscription : février 2008
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 6
Points : 0
Points : 0
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 ?
killerthibs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 12h48   #10
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 583
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 583
Points : 885
Points : 885
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
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 13h29   #11
Invité de passage
 
Étudiant
Inscription : février 2008
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 6
Points : 0
Points : 0
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 !
killerthibs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 13h40   #12
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 583
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 583
Points : 885
Points : 885
Bonjour

Ne pas oublier d'orienter toutes les relations de la 1ère occurrence vers la dernière.
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 13h48   #13
Invité de passage
 
Étudiant
Inscription : février 2008
Messages : 6
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 6
Points : 0
Points : 0
Par contre, Access ne semble pas accepter Select.. Connect By, ou alors j'ai fais une recherche trop superficielle :-/
killerthibs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 14h55   #14
Membre émérite
 
Conseil + Formation
Inscription : février 2010
Messages : 583
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Conseil + Formation

Informations forums :
Inscription : février 2010
Messages : 583
Points : 885
Points : 885
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.
78chris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 19h22   #15
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
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
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h19.


 
 
 
 
Partenaires

Hébergement Web