SQL sous access : comptage unique des doublons

Résolu
hoquei44 Messages postés 16020 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 19 avril 2024 - Modifié le 29 juil. 2017 à 13:45
hoquei44 Messages postés 16020 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 19 avril 2024 - 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

2 réponses

hoquei44 Messages postés 16020 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 19 avril 2024
Modifié le 31 juil. 2017 à 11:24
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
0
hoquei44 Messages postés 16020 Date d'inscription dimanche 19 janvier 2014 Statut Membre Dernière intervention 19 avril 2024
31 juil. 2017 à 13:02
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
0
Rejoignez-nous