[SQL] Histoire de doublons...

Histoire de doublons... [SQL] - Programmation

Marsh Posté le 08-04-2002 à 14:42:07    

J'ai une table d'adhérents qui contient les champs suivants: Nom, Prénom, Adresse, Ville
Il se peut que deux adhérents habitent à la même adresse (par ex mari et femme).
Or je me sers de cette table pour éditer des étiquettes d'envelopppes et je veux éviter d'envoyer deux enveloppes à la même adresse.
Don il faut que je fasse une requête qui me permet d'obtenir la table suivante:
Nom1 Prénom1 Nom2 Prénom2 Adresse Ville
Où Nom1 et Nom2 sont les deux personnes habitant à la même adresse.
Malheureusement je ne maîtrise pas SQL, je fais donc appel à vous pour m'aider.  :)  
Merci!
 
PS: je travaille sous access2000


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
Reply

Marsh Posté le 08-04-2002 à 14:42:07   

Reply

Marsh Posté le 08-04-2002 à 14:55:04    

tu veux que la requete retourne aussi ceux qui sont seuls à leur adresse ?


---------------
Je ne suis ni pour, ni contre, bien au contraire  
Reply

Marsh Posté le 08-04-2002 à 15:07:09    

Tu peux soit faire un groupe sur l'adresse et tu auras :
 
Adresse A
nom1
nom2
nom3
 
Adresse B
nom4
 
Adresse C
nom5
nom6
 
ou bien utiliser le mot clé Distinct
qui renvoie tous les enregistrements différents.

Reply

Marsh Posté le 08-04-2002 à 15:27:34    

Jupiler> Non car le format d'étiquettes ne sera pas le même si il y a plusieurs noms pour la même adresse. Donc il me faudrait: une table avec les personnes "seules" et une table avec les couples.
 
aratorn> ça veut dire que j'aurai un table pour chaque adress?! :??:


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
Reply

Marsh Posté le 08-04-2002 à 16:14:57    

heffer a écrit a écrit :

aratorn> ça veut dire que j'aurai un table pour chaque adress?! :??:  




 
Non, le mot clé DISTINCT te permet de ne renvoyer qu'une seule adresse :  
 
SELECT DISTINCT Adresse FROM Table => te renverra toutes les adresses qu'une seule fois, meme si elles sont présentes plusieurs fois

Reply

Marsh Posté le 08-04-2002 à 16:35:55    

Moi j'aurais utilisé une aggrégation pour obtenir pour chaque addresse Les personnes qui y vivent. Un truc du genre:
SELECT *
FROM my_table
GROUP BY address;


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 08-04-2002 à 16:45:31    

On ne peut pas :non:
 
Si tu n'utilises pas une fonction d'agrégation, tu n'auras aucun regroupement de fait et tu auras une erreur 3122 (sous Jet/Access)

Reply

Marsh Posté le 08-04-2002 à 16:59:12    

Ca marche pas sous Access? Dommage. :/


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 08-04-2002 à 17:54:24    

Pour ceux qui sont éxactement 2 à la même adresse.
 
SELECT First(ad.nom) AS n1, First(ad.prénom) AS p1, Last(ad.nom) AS n2, Last(ad.prénom) AS p2, ad.adr, ad.ville FROM ad
GROUP BY ad.adr, ad.ville
HAVING (((Count(ad.nom))=2));
 
Pour ceux qui sont tout seul à une adresse :
 
SELECT First(ad.nom) AS PremierDenom, First(ad.prénom) AS PremierDeprénom, ad.adr, ad.ville
FROM ad
GROUP BY ad.adr, ad.ville
HAVING (((Count(ad.nom))=1));
 
Testé et approuvé sur MS-ACCESS 2000.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 08-04-2002 à 20:01:52    

Bon boulot Mara's dad!
Voilà un forumeur comme je les aime! :)  
Merci quand même aux autres aussi!


---------------
Découvrez la version 2005 du  Site des Mains!! C'est la même qu'en 2004!
Reply

Marsh Posté le 08-04-2002 à 20:01:52   

Reply

Marsh Posté le 08-04-2002 à 20:19:26    

De rien  ;)


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 08-04-2002 à 22:05:08    

N'empeche que j'avais raison :) si on n'utilise pas de fonctions d'agrégation, ça marche pas ! First et Last sont des fonctions d'agrégation  :)  
 
A+ et bravo à Mara  :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed