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

Messages postés
10665
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
15 octobre 2019
-
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 

2 réponses

Messages postés
10665
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
15 octobre 2019
0
Merci
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
Messages postés
10665
Date d'inscription
dimanche 19 janvier 2014
Statut
Membre
Dernière intervention
15 octobre 2019
0
Merci
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