Access /requete selectionner top des ventes

Résolu
coric06 -  
 Das -
Bonjour,
je cherche à faire une requete sur acces qui selectionne les 20 top des ventes de chaque famille d'articles d'un catalogue.

J'arrive à sélectionner les 20 produits les plus vendus mais pas les 20 produits les + vendus de chaque famille !!
J'ai essayé avec la fonction Top n mais je n'y arrive pas.
Sinon j'ai pensé sélectionner les 20 top produits pour une famille et faire une itération mais je n'y arrive pas non plus.

Voici le volet sql:
SELECT TOP 20 zzzzzzzzzzz250108_2.Qtes AS [Quantités vendues],
zzzzzzzzzzz250108_2.AR_Ref,
F_FAMILLE.FA_CodeFamille
FROM dbo.zzzzzzzzzzz250108_2 INNER JOIN
dbo.F_ARTICLE ON
dbo.zzzzzzzzzzz250108_2.AR_Ref = dbo.F_ARTICLE.AR_Ref,
dbo.F_FAMILLE
GROUP BY dbo.zzzzzzzzzzz250108_2.AR_Ref,
dbo.F_ARTICLE.FA_CodeFamille,
dbo.zzzzzzzzzzz250108_2.Qtes,
dbo.F_FAMILLE.FA_CodeFamille
HAVING (dbo.F_ARTICLE.FA_CodeFamille = 'CARTESGRP')

Merci de votre aide !!!
A voir également:

9 réponses

ricool42
 
Je pense que le mieux sera de passer par une table intermédiaire "par requete création" regroupant les articles avec indication de la famille et la qté totale et ensuite
- soit de récupérer le resultat sur excel et par tri "famille" puis "qté" créeer par macro le numéro de rang pour chacun et supprimer les rangs de 21 et +.....
- soit par macro access créer une nouvelle table en ajoutant par boucle le 20 premiers artciles classés par famille et qté...

Cela dépend aussi du nombre de ligne et de la structure de la table originale....
1
phil_232 Messages postés 286 Date d'inscription   Statut Membre Dernière intervention   33
 
"j'ai pensé sélectionner les 20 top produits pour une famille et faire une itération"
bonne approche, mais au lieu d'iterer je propose une requête UNION

select blabla from bloblo
union
select blibli from blublu
union
...

order by blblblb
0
coric06
 
Phil, merci pour ta réponse...

Le problème est que la liste des familles est très longue et elle évolue sans arret c'zest pourquoi on ne peut pas les mettre dans la requete.
Il faudrait que la requete parcoure la table famille complète et selectionne poutr chaque famille de la table les top 20.
0
Ricool42 Messages postés 3 Date d'inscription   Statut Membre Dernière intervention  
 
Je pense que le mieux sera de passer par une table intermédiaire "par requete création" regroupant les articles avec indication de la famille et la qté totale et ensuite
- soit de récupérer le resultat sur excel et par tri "famille" puis "qté" créeer par macro le numéro de rang pour chacun et supprimer les rangs de 21 et +.....
- soit par macro access créer une nouvelle table en ajoutant par boucle le 20 premiers artciles classés par famille et qté...

Cela dépend aussi du nombre de ligne et de la structure de la table originale.......
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
@¿@ Messages postés 48 Date d'inscription   Statut Membre Dernière intervention   6
 
j avais mal lu excuses
0
phil232 Messages postés 607 Date d'inscription   Statut Membre Dernière intervention   178
 
SELECT * FROM
(
SELECT TOP 20
Qtes AS [Quantités vendues],
AR_Ref,
FA_CodeFamille
FROM
zzzzzzzzzzz250108_2
INNER JOIN F_ARTICLE ON zzzzzzzzzzz250108_2.AR_Ref = F_ARTICLE.AR_Ref
GROUP BY
zzzzzzzzzzz250108_2.AR_Ref,
FA_CodeFamille,
Qtes
)
Sales
INNER JOIN F_ARTICLE ON Sales.AR_Ref = dbo.F_ARTICLE.AR_Ref,
INNER JOIN F_FAMILLE ON F_FAMILLE.FA_CodeFamille = Sales.FA_CodeFamille
0
Adrien132
 
Bonjour à tous,

Je me permet de relancer ce post. La syntaxe ci dessus me semble particulièrement intéressante mais je n'arrive pas à la faire fonctionner. L'objectif est de sortir un TOP 5 par regroupement. Exemple TOP 5 des ventes par vendeur ou les 10 dernières ventes par article ect...

Exemple d'une table avec NomVendeur ; ArticleVendu ; ChiffreDAffaire

Comment sélectionner le top 3 des produits les plus vendus par vendeur (sans faire des unions de table avec des noms de vendeurs figés).

Merci d'avance, j'ai beau chercher je ne trouve pas de piste plus claire que ci dessus.

Adrien
0
Adrien132
 
Pour être plus précis et d'après la réponse ci-dessus, il faudrait faire 2 tables avec distinctes avec la requête ci dessous. Malheureusement cela ne pas et j'obtiens le TOP 3 des articles les plus vendus quelque soit le vendeur...

TableVente : MatriculeVendeur ; ArticleVendu ; ChiffreDAffaire
TableVendeur : MatriculeVendeur ; NomVendeur

puis la requête ci dessous :

SELECT * FROM
(
SELECT TOP 3
MatriculeVendeur, ArticleVendu, ChiffreDAffaire
FROM
TableVente
GROUP BY
MatriculeVendeur, ArticleVendu, ChiffreDAffaire
ORDER BY ChiffreDAffaire DESC
)
sales
INNER JOIN TableVendeur ON sales.MatriculeVendeur = TableVendeur.NomVendeur
;
0
Das
 
Bonjour,

Le sujet m'interresse beaucoup, si vous trouvez une solution, ce serait super bien de la poster.

Merci.
0