gratifiant > microsoft.* > microsoft.access

pirot (10/02/2005, 11h33)
bonjour,
j'essaye de faire une requête à partir d'une table contenant 3 colonnes
------------------------
club nom score
a na 252
a ne 259
a ni 258
a no 253
b pa 258
b pe 255
b pi 250
b po 259
etc.... (chaque club a exactement 4 joueurs)
-------------------------
j'aimerai obtenir la requête suivante:
----------------------------------------
club premier second troisième dernier
a 259 258 253 252
b 259 258 255 250
etc .... une ligne par club avec l'ordre des scores en décroissant
-----------------------------------------
j'ai utilisé une requete avec regroupement et les fonctions max(score)
et min(score)
ce qui me donne le premier et le dernier
mais je ne sais pas quelles expressions utiliser pour avoir le second et
le troisième.

quelqu'un peut-il m'aider?

ou bien: existe-t-il en access l'équivalent de la fonction excel: rang.
si oui, quelle est sa syntaxe?

merci
pirot
G Roydor (10/02/2005, 12h43)
Bonjour,

je ne connais pas de focntion pouvant donner le résultat demandé mais
deux méthodes sont possibles

1) extraire le max de chaque club et les inserer dans une table T1
supprimer (delete) le max de chaque club
puis reiterer en inserant dans T2, T3 et T4

2) numeroter les lignes (en inserant les lignes, ordonnées par club et
score, dans une table avec une colonne Numauto)
puis faire un modulo 4 sur le numéro auto

Bonne chance
GR

pirot a écrit:
[..]
Haikel3000 (10/02/2005, 16h35)
Salut

3 copier-coller et ça roule normalement.....

1) tu copie cette fonction dans un module1

'''''''''''''''''''''''''''''''''''''''''''''''''' ''''''
Function OrderMax(Cat As String) As Integer
Static Mycpt As Integer: Static Mycat As String
Static FirstLaunch As Boolean

'test au premier lancement pour initialisation des compteurs
If FirstLaunch = False Then
FirstLaunch = True
Mycat = Cat
End If

'si on est toujours dans le meme club
If Mycat = Cat Then
Mycpt = Mycpt + 1
'sinon, nouvelle serie de numérotation
Else
Mycat = Cat
Mycpt = 1
End If

'renvoie de l'ordre de classement
OrderMax = Mycpt

'''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''

2) tu ouvres une nouvelle requête en mode sql et tu copie ça dedans
enchangeant matablebis par le nom de ta table
tu sauve sous ce que tu veux et tu la fais tourner

SELECT Matablebis.club, Matablebis.score, Matablebis.nom, ordermax([club])
AS z INTO result
FROM Matablebis
ORDER BY Matablebis.club, Matablebis.score DESC , Matablebis.nom,
ordermax([club]);

3) tu ouvres une nouvelle requête en mode sql et tu copies ça dedans:

TRANSFORM Max(result.score) AS MaxOfscore
SELECT result.club
FROM result
GROUP BY result.club
PIVOT result.z;

et voilà tu fais tourner ta requête 3
et ça donne ça

club 1 2 3 4
a 259 258 253 252
b 259 258 255 250

a plus,

Haikel3000 (l'union fait le code) ;-))

"pirot" wrote:
[..]
Discussions similaires