[SQL MS.Access] TOP10 par catégorie

TOP10 par catégorie [SQL MS.Access] - SQL/NoSQL - Programmation

Marsh Posté le 07-03-2008 à 12:37:53    

Bonjour,
 
j'ai un table de note de frais de collaborateurs.
 
pour le moment j'arrive à afficher le TOP10 des plus "gros dépensiers"
 

SELECT TOP 10  
  [COLL].MATRICULE,  
  [COLL].NOM,  
  [COLL].PRENOM,  
  [COLL].RANK,  
  Sum([FRAIS].MT) AS SumOfMT
FROM  
  [COLL] INNER JOIN [FRAIS]  
ON  
  [COLL].MATRICULE=[FRAIS].MATRICULE
GROUP BY  
  [COLL].MATRICULE,  
  [COLL].NOM,  
  [COLL].PRENOM,  
  [COLL].RANK,  
ORDER BY  
  Sum([FRAIS].MT) DESC;


 
Cela m'affiche le TOP10, tout rank confondu.
 
Il me faudrait maintenant pourvoir afficher le TOP10 par RANK:
C'est à dire le TOP10 de chaque RANK, en gros x TOP10 pour les x RANK de ma table COLL.
 
Et là, j'ai les doigts qui collent un peu au clavier. Si quelqu'un pouvait m'aider.
 
Merci d'avance,


Message édité par daDD le 11-03-2008 à 11:56:34

---------------
☢ Hail to the Ping Baby ! ☢
Reply

Marsh Posté le 07-03-2008 à 12:37:53   

Reply

Marsh Posté le 11-03-2008 à 11:55:36    

J'ai un peu avancer dans mes recherches, ou plutot reculé  :pt1cable:  
 
Pour afficher ce que je souhaitais, il faudrait apparement que je place mon SELECT TOP 10 dans une sous-requete.
Le problème qui ce pose, c'est que Access n'aime pas trop et tire la pate pour rappatrier le résultat.
 
Du coup, je pensais mettre un compteur de ligne qui ce réinitialiserait à chaque nouveau RANK.
 

SELECT  
  [COLL].MATRICULE,  
  [COLL].NOM,  
  [COLL].PRENOM,  
  [COLL].RANK,  
  Sum([FRAIS].MT) AS SumOfMT
FROM  
  [COLL] INNER JOIN [FRAIS]  
ON  
  [COLL].MATRICULE=[FRAIS].MATRICULE
GROUP BY  
  [COLL].MATRICULE,  
  [COLL].NOM,  
  [COLL].PRENOM,  
  [COLL].RANK,  
ORDER BY  
  [COLL].RANK, Sum([FRAIS].MT) DESC;


 
Le résultat donne :
 


MATRICULE      | NOM     | PRENOM  | RANK       | SumOfMT
20             | TITI    | Claude  | Ass.Com    | 300
15             | TATA    | Daniel  | Ass.Com    | 200
3              | TOTO    | Paul    | Commercial | 1000
1              | RIRI    | Jean    | Commercial | 800
4              | FIFI    | Louis   | Commercial | 500
16             | DUBOSS  | Nicolas | Gérant     | 700


 
Et je voudrais rajouter une colonne CPT pour obtenir ceci :


MATRICULE      | NOM     | PRENOM  | RANK       | SumOfMT | CPT
20             | TITI    | Claude  | Ass.Com    | 300     | 1
15             | TATA    | Daniel  | Ass.Com    | 200     | 2
3              | TOTO    | Paul    | Commercial | 1000    | 1
1              | RIRI    | Jean    | Commercial | 800     | 2
4              | FIFI    | Louis   | Commercial | 500     | 3
16             | DUBOSS  | Nicolas | Gérant     | 700     | 1


 
 
J'ai beau chercher sur le net, je n'arrive pas à créer le bon module pour faire cette satané boucle.
 
!HELP


---------------
☢ Hail to the Ping Baby ! ☢
Reply

Marsh Posté le 11-03-2008 à 13:21:42    

Apparement, je pourrais aussi ajouter une condition dans ma requête avec la fonction IIF (Merci billou de rajouter un i à if ^^)
 
Mais comment ?
 
IIF ([COLL].RANK = [COLL].RANK.PRECEDENT ; $cpt + 1 ; 1) ???
 
Comment écrire ca sous access.


---------------
☢ Hail to the Ping Baby ! ☢
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed