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 21/02/2011, 16h07   #1
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
Par défaut trouver des doublons

bonjour,
le terme de doublons n'est peut-être pas le bon mais je n'en vois pas d'autre.
voici mon problème.

J'ai une table qui contient une liste de syndicats de communes (des regroupements de communes concernant une ou plusieurs compétances), et une tables en relation contenant la liste des communes.
une communes peut faire partie de plusieurs syndicats.
on me demande de faire apparaitre les syndicats ayant les memes adhérants.
Par exemple le syndicat 1 a comme membres les communes a, b et c. le syndicat 2 a lui aussi comme membres les communes a, b et c.
comment mettre en évidence tous les syndicats ayant les mêmes membres ?

la seule solution que j'ai trouvé serait de créer un champ supplémentaire dans la table syndicat et par une moulinette d'y coller les identifiants de chacune des communes membres bout à bout. Il ne resterait plus ensuite qu' a faire une recherche de doublons sur ce champ supplémentaire.

est-ce qu'il n'y aurait pas plus simple ?
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 16h29   #2
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
pourquoi pas mais je n'arrive pas trouver ce que devrait faire la sous-requête.
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2011, 16h57   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Aml77,

D'après ce que je comprends, tu as les tables suivantes :

Table Syndicats :
- Id_Syndicat (clé primaire)
- Nom_Syndicat
...

Table Communes :
- Id_Commune (clé primaire)
- Nom_Commune
...

Table Syndicats_Communes :
- Id_Syndicat (clé primaire 1)
- Id_Commune (clé primaire 2)

Relations :
Syndicats 1-----n Syndicats_Communes via Id_Syndicat ;
Communes 1-----n Syndicats_Communes via Id_Commune.

C'est bien cela ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 09h55   #4
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
bonjour Richard
oui c'est ça pile poil, une table syndicats, une table communes et une table intermédiaire pour faire le lien de plusieurs à plusieurs.
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h05   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Aml77,

Il te faut donc la liste des communes qui appartiennent à plusieurs syndicats différents.

Crér une requête R1, via l'assistant :
- ajouter la table Syndicats_Communes (FROM) ;
- passer en requête de regroupement (GROUP BY) ;
- sélectionner Id_Commune et Count(*) (SELECT) ;
- critères : Count(*) > 1.
==> liste des communes appartenant à plusieurs syndicats.

Si tu veux retrouver la liste des syndicats de ces communes, créer une requête R2, via l'assistant :
- ajouter la requête R1 (FROM) ;
- ajouter la table Syndicats_Communes (FROM) ;
- ajouter la table Communes (FROM) ;
- ajouter la table Syndicats (FROM) ;
- lier R1 à Syndicats_Communes via Id_Commune (JOIN) ;
- lier Syndicats_Communes à Syndicats via Id_Syndicat (JOIN) ;
- lier R1 à Communes via Id_Commune (JOIN) ;
- sélectionner les champs que tu veux.
==> tu devrais obtenir le résultat souhaité.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/02/2011, 12h24   #6
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
effectivement ce que tu proposes permet de savoir quelles sont les communes adhérant à plusieurs syndicat ainsi que la liste des syndicats en question mais cela ne me permet pas de savoir quels syndicats font doublons.

le problème vient du fait que les requetes font apparaitre chacune des communes d'un syndicat sur des lignes distinctes.
comme ça :

id_syndicat id_commune
1-----------------1
1-----------------2
1-----------------3
2-----------------1
2-----------------2
3-----------------1
3-----------------2
3-----------------3

dans ce cas les syndicats 1 et 3 font doublon : ils ont les mêmes communes
moi je voudrais comparer la liste 123 avec la liste 12 puis la liste 123 etc
et trouver les doublons
mais je me demande si c'est possible tant que c1, c2 et c3 sont sur des lignes différentes.
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 12h34   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
OK, le cahier des charges a un peu changé.

Dans ton exemple :
- le syndicat 1 "possède" les communes 1, 2 et 3 ;
- le syndicat 2 "possède" les communes 1 et 2 ;
- le syndicat 3 "possède" les communes 1, 2 et 3.

En admettant qu'il y ait :
- le syndicat 4 qui "possède" les communes 1, 2, 3 et 4.

Considères-tu que le syndicat 4 fait doublon avec les syndicats 1 et 3 ?
==> réponse par oui ou par non, STP.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 13h48   #8
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
non
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h46   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bien.

Donc, il te faut la liste des syndicats possédant exactement la même liste de communes, ni plus, ni moins.

Il faudrait générer la table T1 suivante (2 champs) :
- Id_Syndicat (clé primaire)
- Id_Communes_concatenation (concaténation, dans un champ texte, de toutes les communes rattachées au syndicat)

Ensuite, une requête R3 :
- ajouter T1 (FROM) ;
- ajouter T1 (FROM) ;
- lier T1 à T1_1 via Id_Communes_concatenation (JOIN) ;
- sélectionner T1.Id_Syndicat et T1_1.Id_Syndicat (SELECT) ;
- critères : T1.Id_Syndicat<>T1_1.Id_Syndicat.

Pas testé... mais tu vois l'esprit.

Je ne connais pas VBA, mais il s'agit de faire une boucle de lecture sur Syndicats_Communes trié par Id_Syndicat avec une rupture à chaque changement de syndicat.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h26   #10
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
merci pour tes réponses mais en fait tu me proposes de faire ce que je suggérais moi-même dans mon post initial : concaténer la liste des communes dans un nouveau champ et utiliser bêtement l'assistant doublons d'access sur ce nouveau champ.

en fait j'ai déja fait un truc similaire il y a au moins 10 ou 12 ans et je peux retrouver le code mais je voulais savoir s'il n'existait pas un moyen plus simple ne passant pas par du vba.

Je vais me résoudre à en passer par là

merci à toi en tout cas
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h37   #11
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Juste une idée, en passant : la création d'une requête "analyse croisée" pourrait t'éviter d'écrire du code pour le même résultat.
Code sql :
1
2
3
4
5
TRANSFORM First(Syndicat_Commune.Id_Commune) AS PremierDeId_Commune
SELECT Syndicat_Commune.Id_Syndicat
FROM Syndicat_Commune
GROUP BY Syndicat_Commune.Id_Syndicat
PIVOT Syndicat_Commune.Id_Commune;
==> te donne une ligne par syndicat avec les communes en colonnes (si tu n'en a pas trop).
Ensuite, tu peux concaténer les champs des communes et chercher les doublons.
Si tu as beaucoup de communes, l'assistant requête "analyse croisée" te le dira et, dans ce cas, le code est incontournable.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h22   #12
Invité de passage
 
alain
Inscription : février 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : alain

Informations forums :
Inscription : février 2011
Messages : 7
Points : 1
Points : 1
c'est une très bonne idée mais finalement je viens de le faire en vba sans trop galérer (j'ai bidouiller mon code d'il y a dix ans). Par contre j'ai du coller la concaténation dans un champ mémo à cause du nombre de caractères et apparemment l'assistant doublons ne prends pas en compte les champs mémo
je vais faire un count dans une requête pour voir ceux qui sont supérieurs à 1.
mais je ne pourrais pas afficher la liste des syndicats en même temps car on ne peut pas faire un lien sur un champ mémo.
je trouverai une solution plus ou moins élégante jeudi. Là je pars.

Merci encore pour ton aide
aml77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h59.


 
 
 
 
Partenaires

Hébergement Web