SQL sous access : comptage unique des doublons [Résolu]

hoquei44 7448 Messages postés dimanche 19 janvier 2014Date d'inscription 10 décembre 2017 Dernière intervention - 29 juil. 2017 à 13:43 - Dernière réponse : hoquei44 7448 Messages postés dimanche 19 janvier 2014Date d'inscription 10 décembre 2017 Dernière intervention
- 31 juil. 2017 à 13:02
Bonjour à tous,

Je suis sous Access 2007 - 2010.

J'ai deux tables :
1/ Licence [Num_Licence(nombre), Club(texte), Début(date: jj/mm/aaaa), Fin(date: jj/mm/aaaa)]
2/ Licencié [Num_Licence(nombre), Nom(texte), Naissance(date: jj/mm/aaaa), Màj(date: jj/mm/aaaa)]

Le Num_Licence sert de clé primaire pour la table Licencié.


Mon objectif est de réaliser une requête permettant d'obtenir un tableau avec le nombre de licenciés par saison et par club.
Par simplification, je définis la saison comme étant l'année de Licence.Fin.

J'ai alors réalisé la requête suivante :

TRANSFORM Count(*) AS MaTable
SELECT Licence.Club AS Club
FROM Licencié, Licence
WHERE Licencié.Num_Licence=Licence.Num_Licence
GROUP BY Licence.Club
ORDER BY Licence.Club
PIVOT year(Licence.fin);


Elle fonctionne presque bien. Le problème est qu'elle compte à plusieurs reprises un licencié ayant pris plusieurs licences la même année dans le même club.
Pour moi, un licencié ne doit avoir qu'une seule licence par club et par saison. Cependant, il peut arriver qu'il ait plusieurs licences dans une même saison, mais dans des clubs différents.

Je ne parviens pas à créer la requête permettant de pallier mon soucis.
Il ne faut pas qu'un licencié soit compté en doublon dans un même effectif (=liste des licenciés d'une saison donnée pour un club).

Avec une autre requête, je connais la liste des effectifs pour une saison et un club donné :
SELECT DISTINCT Licencié.Num_Licence, Licencié.Nom, Licencié.Naissance
FROM Licencié, Licence
WHERE Licencié.Num_Licence=Licence.Num_Licence
AND year(Licence.Fin)=[Saison ?]
AND Licence.Club =[Club ?]
ORDER BY Licencié.Nom;


Pour info, je parvenus à constituer cette base de données notamment à l'aide des conseils sur les macros que vous m'aviez donné il y a quelques temps que j'ai su ré-exploiter. Je vous en remercie vivement.

Merci par avance de l'aide que vous pourrez m'apporter.

CB
Afficher la suite 
7448Messages postés dimanche 19 janvier 2014Date d'inscription 10 décembre 2017 Dernière intervention

2 réponses

Répondre au sujet
hoquei44 7448 Messages postés dimanche 19 janvier 2014Date d'inscription 10 décembre 2017 Dernière intervention - Modifié par hoquei44 le 31/07/2017 à 11:24
0
Utile
Rebonjour,

Je vais simplifier ma question car cela ne sert à rien de se compliquer à utiliser deux tables.

J'obtiens le même tableau avec la requête suivante :

TRANSFORM count(num_licence) AS NbDeLicenciés
SELECT Club
FROM Licence
GROUP BY Club
PIVOT year(fin);


Dans ma table initiale, il n'existe pas de doublon. Mais utilisant la fonction year(fin), cela a pour conséquence d'en créer.

Or, je ne souhaite que les doublons (voir triplon) ne soit compté que pour un.


A ceux qui ne sont ni à la plage, ni au travail.

CB
Commenter la réponse de hoquei44
hoquei44 7448 Messages postés dimanche 19 janvier 2014Date d'inscription 10 décembre 2017 Dernière intervention - 31 juil. 2017 à 13:02
0
Utile
Bonjour,

Je suis parvenu à réaliser ce que je souhaitais par l'intermédiaire de deux requêtes :

Voici la première requête que j'ai nommé MaTable. Cela me permet d'obtenir un tableau ne contenant aucun doublon et présentant juste les données nécessaires (licence, saison, club).
SELECT DISTINCT Num_licence AS Licence, club, year(fin) AS Saison
FROM Licence
GROUP BY Num_licence, club, year(fin);



J'ai ensuite créé une seconde requête en faisant comme si le résultat de la première requête était une table comme une autre.
TRANSFORM Count(MaTable.Licence) AS NbDeLicenciés
SELECT MaTable.Club
FROM MaTable
GROUP BY Licence.Club
PIVOT MaTable.Saison;



J'ai été plus rapide que vous, à la prochaine peut-être !

CB
Commenter la réponse de hoquei44

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.