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 11/09/2011, 21h46   #1
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Par défaut Requête particulière sur une table

Bonjour,

Dans ma base de données de gestion des membres d'une association, j'ai la table [Cotisations] qui comporte les champs : [Membre] [Année] [Cotisation] ... où [Membre] [Année] sont les clés.

Sachant que chaque année, il y a des membres nouveaux, des membres qui ne se réinscrivent pas, j'aimerais créer une requête type analyse croisée qui me donne, le nombre de membres qui ne se réinscrivent pas et le nombre de membres nouveaux année par année.

Je n'ai pas trouvé de solution. Tout ce que j'ai réussi à faire est une requête qui me donne les membres qui ne se réinscrivent pas entre l'année N et l'année N-1. Je peux en faire autant pour les membres nouveaux entre l'année N et l'année N-1.

Comment faire?

Jean-Pierre
jeanpierre78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2011, 23h35   #2
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Bonjour,

j'ai une solution mais sans passer par une requête analyse croisée

1) Créer une table nommée "tAnnée" avec un seul champ nommée "Année" de type numérique entier et possédant la clef primaire

2) Renseigner la table créée avec toutes les années entre la plus ancienne cotisation et 2020 par exemple

3) Créér la requête ci-dessous qui compte par année les entrants et les sortants jusqu'à l'année en cours
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT ans.année,
       (SELECT COUNT(*)
        FROM   (SELECT MIN(année) AS minan
                FROM   cotisation
                GROUP  BY membre)
        WHERE  minan = ans.année)         AS entrants,
       (SELECT COUNT(*)
        FROM   (SELECT MAX(année) AS maxan
                FROM   cotisation
                GROUP  BY membre)
        WHERE  maxan = ( ans.année - 1 )) AS sortants
FROM   tannée AS ans
       LEFT JOIN cotisation
         ON ans.année = cotisation.année
GROUP  BY ans.année
HAVING ans.année <= Year(DATE())
ORDER  BY ans.année;
sauf erreur,

Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/09/2011, 00h28   #3
Membre Expert
 
Inscription : avril 2006
Messages : 1 318
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 1 318
Points : 1 586
Points : 1 586
Deux petites remarques :

Si il n'y a jamais eu d'année sans aucune cotisation, la requête peut être simplifiée ainsi sans avoir besoin de créer une table des années :
Code :
1
2
3
4
5
6
7
 
SELECT CO.Année,
(SELECT COUNT(*) FROM (SELECT MIN(année) AS minan FROM cotisation GROUP BY membre) WHERE minan = CO.année) AS entrants,
(SELECT COUNT(*) FROM (SELECT MAX(année) AS maxan FROM cotisation GROUP BY membre) WHERE maxan = ( CO.année - 1 )) AS sortants
FROM cotisation AS CO
GROUP BY CO.Année
ORDER BY CO.Année;
Le code du post précédent n'était pas lisible dans le QBE, en voici une version simplifié avec la table tAnnée :
Code :
1
2
3
4
5
6
7
8
 
SELECT ans.année, 
(SELECT COUNT(*) FROM (SELECT MIN(année) AS minan FROM cotisation GROUP BY membre) WHERE minan = ans.année) AS entrants, 
(SELECT COUNT(*) FROM (SELECT MAX(année) AS maxan FROM cotisation GROUP  BY membre) WHERE  maxan = ( ans.année - 1 )) AS sortants
FROM tannée AS ans
WHERE ans.année<=Year(Date())
GROUP BY ans.année
ORDER BY ans.année;
Philippe
philben est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/09/2011, 12h16   #4
Membre régulier
 
Inscription : novembre 2010
Messages : 151
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : novembre 2010
Messages : 151
Points : 89
Points : 89
Bonjour philben,

Bravo et merci pour la réponse rapide. J'ai adopté la seconde solution car je n'ai pas d'année sans cotisation. La requête fonctionne bien.

La première solution fonctionne.

Jean-Pierre
jeanpierre78 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 23h46.


 
 
 
 
Partenaires

Hébergement Web