Requete spéciale

vdbadr Messages postés 3 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 15 août 2005 - 18 avril 2005 à 20:09
cs_tecman Messages postés 63 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 juin 2005 - 10 mai 2005 à 18:15
Salut tout le monde !
Je suis en train de developper une base access pour etablir le profil client et je me bute à
un probleme :
Dans l'une de mes tables, j'ai tout les clients et le volume de leurs achats respectifs (€) et
j'aimerai connaitre le nombre de clients participant à 30, 40 et 50 de mon chiffre d'affaire...
Mais je n'arrive pas a faire la requete ....
Cette derniere resemblerait en francais à :
Compte(Clients) jusqu'a ce que Somme(Volume) > SommeTotale(Volume) avec un un order
by du client (décroissant) pour selectionner les plus gros clients en premier.

Merci à tous d'avance de vos reponses et bonne soirée

2 réponses

cs_tecman Messages postés 63 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 juin 2005
10 mai 2005 à 17:38
Comme tu le dis si bien, on peut exprimer en français notre problématique

Décomposons le probléme.
1) Il nous faut calculer le total des achat (le chiffre d'affaire)
2) Puis calculer le ration Achat/Total.
3) Sérialiser les clients selon les critéres définis propres au ratio obtenu
4) Comptabiliser le nombre de client répondant à cette série.
Ouf !

1) La requête suivante répond à ce point :
SELECT Sum(Client.Achat) AS total FROM Client). AS calcul

2 Pour le calcul du ratio, nous devons utiliser la table Client une premiére fois pour sélectionner els clients et une seconde pour intégrer le calcul précédent.
Tout requêteur se perdrait si nous n'utilisions pas les alias.
SELECT Client.idClient
FROM Client, (SELECT Sum(cli.Achat) AS total FROM Client AS cli). AS calcul
(cli est donc l'alias pris pour la table Client dans le calcul du total).

3) Une simple condition AND de borne inférieure et de borne supérieure suffit :
WHERE ((([Achat]/[total])>0.1 And ([Achat]/[total])<0.2));
(pour les cilents dont le ratio est compris entre 10% et 20% par exemple)

4) La fonction Count convient à cette demande :
SELECT Count(Client.idClient) AS Nb2010

En final nous obtenons la requête finale suivante :
SELECT Count(Client.idClient) AS Nb2010
FROM Client, (SELECT Sum(cli.Achat) AS total FROM Client AS cli). AS calcul
WHERE ((([Achat]/[total])>0.1 And ([Achat]/[total])<0.2))

Tecman
0
cs_tecman Messages postés 63 Date d'inscription mercredi 5 mars 2003 Statut Membre Dernière intervention 29 juin 2005
10 mai 2005 à 18:15
A la relecture de ma proposition, je m'aperçois que je ne répond pas strictement à la demande.
Le compte demandé correspond au numéro de compte du client.
Donc pour répondre (enfin je l'espére), il te suffit de corriger la sélection, de rendre visible le calcul du ratio et d'ordonnacer selon ce ratio.

Nous obtenons la requête suivante :
SELECT Client.CompteClient, [Achat]/[total] AS ratio
FROM Client, (SELECT Sum(cli.Achat) AS total FROM Client AS cli). AS calcul
WHERE ((([Achat]/[total])>0.1 And ([Achat]/[total])<0.2))
ORDER BY ratio DESC

That's all.

Tecman
0
Rejoignez-nous