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"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT Referentiel.SiteComptable, Max(Referentiel.Taux) AS MaxDeTaux
FROM Referentiel
GROUP BY Referentiel.SiteComptable;
2.Requete "qMaxTaux2"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.