ACCESS SQL, faire un count par mois
Xcited
Messages postés
13
Statut
Membre
-
Xcited Messages postés 13 Statut Membre -
Xcited Messages postés 13 Statut Membre -
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 :)
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 :)
A voir également:
- ACCESS SQL, faire un count par mois
- Trier par mois excel - Guide
- Youtube premium 2 mois gratuit - Accueil - TV & Vidéo
- 600h en mois ✓ - Forum Bureautique
- Acer quick access ✓ - Forum PC portable
- Excel mois en lettre ✓ - Forum Bureautique
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à
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à