ACCESS SQL, faire un count par mois

Fermé
Xcited Messages postés 12 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 9 février 2010 - 9 févr. 2010 à 03:21
Xcited Messages postés 12 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 9 février 2010 - 9 févr. 2010 à 14:26
Bonjour,

Je dispose d'une table avec trois colonnes (je simplifie à l'essentiel en restant clair), [Nom du client], [Date d'entrée du client], [Date de sortie du client].

En règle générale, un client ne reste qu'un an du fait de la particularité de la prestation fournie par la société.

Je souhaiterai pouvoir compter mois par mois, le nombre de clients que compte l'entreprise sur une année, pour en observer l'évolution au cours du temps.

Quelqu'un a une idée sur la façon de procéder ?

Par avance je vous remercie de vos réponses :)

2 réponses

Salut
Je suis pas très versé en Access mais je vais quand même essayer de te guider
Idéalement, ta requête serait du genre
select année, mois, count([Nom du client])
from clients
group by année, mois

sauf que dans ta table, tu n'as pas un inventaire des différents mois. tu vas donc être obligé de créer une nouvelle table (Calendrier par exemple) avec une colonne contenant des dates ([DebutMois] par exemple)

comme je connais pas Access, je vais supposer que la conversion date => chaine se fait avec la fonction TEXTE avec comme premier argument une date et en second argument un format. ex : si x=15/10/2009, TEXTE(x, 'ddmm') renvoie la chaine '1510' ainsi que TEXTE(x, 'yyyymm') renvoie la chaine '200910'

et si [DebutMois] contient les dates 1/09/2009, 1/10/2009, 1/11/2009 etc
ta requête devient alors
select texte([DebutMois], 'yyyy') as Annee
, texte([DebutMois], 'mm') as Mois
, count([Nom du client])
from clients, Calendrier
where texte([DebutMois], 'yyyymm') between texte([Date d'entrée du client], 'yyyymm') and Texte([Date de sortie du client], 'yyyymm')
group by texte([DebutMois], 'yyyy'), texte([DebutMois], 'mm')

Cette requête te permet de compter 3 fois un client entré le 18/03/2009 et sorti le 4/07/2009
* 1 fois pour 01/04/2009 (car '200904' est bien entre '200903' et '200907')
* 1 fois pour 01/05/2009 (car '200905' est bien entre '200903' et '200907')
* et 1 fois pour 01/06/2009 (car '200906' est bien entre '200903' et '200907')
Comme c'est réalisé pour l'ensemble de la table, tu auras donc pour '200908' le nombre de clients où Debut < 200908 et Fin > 200908

Voilà. ta solution est par là. Je te laisse chercher les conversions que je ne connais pas.


nb: j'avais pensé se passer d'une table calendrier et se servir des dates debut et fin dans le fichier client. L'inconvénient est que si aucun client ne débute le mois m ni aucun ne termine ce mois-là, alors le mois m ne sert pas au comptage et du coup tu ne sais pas combien de clients tu as ce mois-là
0
Xcited Messages postés 12 Date d'inscription lundi 25 mai 2009 Statut Membre Dernière intervention 9 février 2010
9 févr. 2010 à 14:26
Merci pour ta réponse rapide, il va falloir que je regarde avec attention la solution que tu proposes, je te réponds dès que j'ai pu expérimenter la chose !

Merci encore !
0