Requête sur 2 tables, avec ordre

[Résolu]
Signaler
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
-
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
-
J'ai 2 tables. 1 tables "versements" (NumSalarie, MontantVers, NumEntreprise) et une table "salariés"(NumSalarie, Nom).
Ma requête consiste à récupérer les 3 Nom_salariés qui versent le + d'argent pour l'entreprise num1.
(J'ai simplifié).
J'ai déjà fait la requête qui me rend les "NumSalarie" dans l'ordre croissant de leur versement :
SELECT VERSEMENTS.NumSalarie, Sum(VERSEMENTS.MontantVers)
FROM VERSEMENTS
WHERE (((VERSEMENTS.NumEntreprise)='1'))
GROUP BY VERSEMENTS.NumSalarie
ORDER BY Sum(VERSEMENTS.MontantVers) DESC;
explication :le GROUP BY permet d'avoir le total des versements pour chaque salariés ; le ORDER BY permet de les classer par ordre du + gros "verseur" au - gros.
question : comment, dans la même requête, récupérer le nom de chacun des salariés, en gardant l'ordre.

J'ai effectué une requête mais celle-ci ne garde pas l'ordre du + grand au + petit, il me rend les noms par ordre alphabétique :
SELECT nom
FROM salaries
WHERE salaries.NumSalarie in
(SELECT VERSEMENTS.NumSalarie, Sum(VERSEMENTS.MontantVers)
FROM VERSEMENTS
WHERE (((VERSEMENTS.NumEntreprise)='1'))
GROUP BY VERSEMENTS.NumSalarie
ORDER BY Sum(VERSEMENTS.MontantVers) DESC);

Est-ce que quelqu'un aurait la solution à mon problème ?

6 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Oups j'ai oublie de remettre le NumEntreprise en texte.
Mais d'ailleurs quel est l'intérêt de mettre NumEntreprise en texte???

SELECT VERSEMENTS.NumSalarie, Sum(VERSEMENTS.MontantVers) AS SommeDeMontantVers, Salarie.Nom
FROM Salarie INNER JOIN VERSEMENTS ON Salarie.NumSalarie = VERSEMENTS.NumSalarie
WHERE (((VERSEMENTS.NumEntreprise)='1'))
GROUP BY VERSEMENTS.NumSalarie, Salarie.Nom
ORDER BY Sum(VERSEMENTS.MontantVers) DESC;

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
149
Date d'inscription
mardi 30 septembre 2003
Statut
Membre
Dernière intervention
23 juillet 2009

essai ca

SELECT VERSEMENTS.NumSalarie, Sum(VERSEMENTS.MontantVers)
FROM VERSEMENTS
WHERE (((VERSEMENTS.NumEntreprise)='1'))
GROUP BY VERSEMENTS.NumSalarie
HAVING COUNT(VERSEMENTS.NumSalarie)=3
ORDER BY Sum(VERSEMENTS.MontantVers) DESC
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Cette requête semble faire ce que tu souhiates.

SELECT VERSEMENTS.NumSalarie, Sum(VERSEMENTS.MontantVers) AS SommeDeMontantVers, Salarie.Nom
FROM Salarie INNER JOIN VERSEMENTS ON Salarie.NumSalarie = VERSEMENTS.NumSalarie
WHERE (((VERSEMENTS.NumEntreprise)=1))
GROUP BY VERSEMENTS.NumSalarie, Salarie.Nom
ORDER BY Sum(VERSEMENTS.MontantVers) DESC;

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
3
NumEntreprise sera bien entendu un paramêtre... j'ai mis en texte uniquement pour tester... je teste et je vous tiens au courant si c'est bon...
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
3
Big200148 >> je ne pense pas que ta proposition fonctionne car, à 1ère vue, tu ne récupères pas le NOM du salariés alors que c'est là mon problème : récupérer les nom des salariés en gardant l'ordre du "select" concernant les versements... je me suis bien fait comprendre ?? :-/
Messages postés
222
Date d'inscription
mercredi 5 avril 2006
Statut
Membre
Dernière intervention
18 février 2011
3
Merci beaucoup JRIVET... ça roule comme sur des roulettes  thanks !!!