Je parcours pas mal le forum pour des recherches particulières ou tout simplement pour fouiner un peu.
J'ai une question à laquelle je n'ai pas vue de réponse
J'ai une table stat de ventes, constituée de :
Periode
Ligne de produit
Classe de produit
Article
Qté Fact sur période
CA Fact sur période
Mon besoin est de listé le top Vente sur une période par clé (Ligne -Classe)
J'ai donc construit ma requête :
SELECT
Ligne, Classe, Article, Sum(Qte), Sum(CA)
FROM
MaTableStat
WHERE
Periode between PeriodeDebut AND PeriodeFIN
GROUP BY
Ligne, Classe, Article
ORDER BY
Ligne, Classe, Sum(Qte) Desc
Ce qui liste bien l'ensemble de mes couples (Ligne, Classe) trié sur Qté totale décroissante
Mon besoin est de lister les 10 meilleurs ventes par (Ligne, Classe)
Naïvement, j'ai essayer d'avoir mon top 10 des ventes en ajoutant TOP 10 en entête du select.
Naïvement, car cela ne récupère que les 10 premiers enreg ... Et c'est normal
Depuis, je cherche et je ne trouve pas de solution
Avez vous une idée ? Une piste à suivre ?
Merci
MagicTaz
A voir également:
Afficher les X premiers engistrements pour chaque clés composées
cs_Malkuth
Messages postés268Date d'inscriptionsamedi 22 février 2003StatutMembreDernière intervention24 avril 20134 30 sept. 2012 à 21:01
Un CROSS Apply pourrait répondre a tes besoins
SELECT Stats.Ligne, Stats.Classe, Stats.Article, Stats.QteTotal, Stats.CATotal
FROM (
SELECT DISTINCT MaTableStat.Ligne, MaTableStat.Classe
FROM MaTableStat
WHERE MaTableStat.Periode between PeriodeDebut AND PeriodeFIN
) AS LignesClasses
CROSS APPLY (
SELECT TOP (10) MaTableStat.Ligne, MaTableStat.Classe, MaTableStat.Article, Sum(MaTableStat.Qte) AS QteTotal, Sum(MaTableStat.CA) AS CATotal
FROM MaTableStat
WHERE MaTableStat.Periode between PeriodeDebut AND PeriodeFIN
AND MaTableStat.Ligne = LignesClasses.Ligne
AND MaTableStat.Classe = LignesClasses.Classe
GROUP BY MaTableStat.Ligne, MaTableStat.Classe, Article
ORDER BY MaTableStat.Ligne, MaTableStat.Classe, Sum(MaTableStat.Qte) Desc
) AS Stats
Merci Malkuth, c'est tout à fait ce dont j'avais besoin.
Entre temps j'ai éssayé plusieurs solutions à base de Left join et de UNION mais soit je n'avais pas le résultat escompté soit j'avais des temps de traitement allucinant
Cette solution est simple et en plus super rapide.