antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 2011
-
23 mai 2007 à 11:33
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 2011
-
23 mai 2007 à 11:58
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 ?
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 23 mai 2007 à 11:46
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;
Big200148
Messages postés149Date d'inscriptionmardi 30 septembre 2003StatutMembreDernière intervention23 juillet 2009 23 mai 2007 à 11:43
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
jrivet
Messages postés7393Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201259 23 mai 2007 à 11:44
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;
antoine_ferard
Messages postés222Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention18 février 20113 23 mai 2007 à 11:53
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 ?? :-/