Bonjour,
Je suis devant un cas apparemment simple qui défie les possibilités du sql.
Les données : table "Referentiel"
SiteRisque SiteComptable Taux
AAA 123 0,33
ABC 123 0,22
DEF 123 0,11
GHV 123 0,33
IJB 678 0,80
QSD 123 0,33
UJK 678 0,45
UNF 890 0,99
YGV 890 0,25
L'objectif :
Sortir la liste des SiteRisque qui ont le taux maximal, par SiteComptable. S'il y a plusieurs SiteRisque qui ont le même taux maximal par SiteComptable, prendre le SiteRisque minimum parmi ces SiteRisque.
Sur les données ci-dessus, le résultat est le suivant :
SiteComptable SiteRisque
123 AAA
678 IJB
890 UNF
En Access, j'obtiens le résultat avec 2 requêtes. La seconde utilise la première :
1. Requete "qMaxTaux1"
1 2 3
| SELECT Referentiel.SiteComptable, Max(Referentiel.Taux) AS MaxDeTaux
FROM Referentiel
GROUP BY Referentiel.SiteComptable; |
2.Requete "qMaxTaux2"
1 2 3
| SELECT Min(Referentiel.SiteRisque) AS MinDeSiteRisque, Referentiel.SiteComptable
FROM qMaxTaux1 INNER JOIN Referentiel ON (qMaxTaux1.SiteComptable = Referentiel.SiteComptable) AND (qMaxTaux1.MaxDeTaux = Referentiel.Taux)
GROUP BY Referentiel.SiteComptable; |
Rem. Je n'utilise pas de table intermédiaire entre les deux requêtes.
La question : Je voudrais obtenir le résultat avec une seule requête sql (qui peut elle-même contenir une sous-requête, mais pas deux requêtes séparées ni une table intermédiaire).
Merci d'avance pour vos réponses/réactions.
V.
Partager