Try reversing the rank comparison
SELECT Q.[division], Q.[people], Q.[cost]
, (SELECT COUNT(*) FROM [YourTable] Q1
WHERE Q1.[division] = Q.[division]
AND Q1.[cost] > Q.[cost])+1 AS Rank
FROM YourTable AS Q
WHERE ((((SELECT COUNT(*) FROM [YourTable] Q1
WHERE Q1.[division] = Q.[division]
AND Q1.[cost] > Q.[cost])+1)<=5))
ORDER BY Q.[division], Q.[cost] DESC;
An alternative which may be faster would be to use something like the
following.
SELECT Q.[division]
, Q.[people]
, Q.[cost]
, Count(Q1.Division)+1 AS Rank
FROM YourTable AS Q LEFT JOIN YourTable as Q1
ON Q.Division = Q1.Division
AND Q.Cost > Q1.Cost
GROUP BY Q.[division], Q.[people], Q.[cost]
HAVING Count(Q1.Division) +1 <=5
'====================================================
John Spencer
Access MVP 2002-2005, 2007-2008
The Hilltop Institute
University of Maryland Baltimore County
'====================================================
KARL said:
Try this --
SELECT Q.[division], Q.[people], Q.[cost], (SELECT COUNT(*) FROM [YourTable]
Q1
WHERE Q1.[division] = Q.[division]
AND Q1.[cost] < Q.[cost])+1 AS Rank
FROM YourTable AS Q
WHERE ((((SELECT COUNT(*) FROM [YourTable] Q1
WHERE Q1.[division] = Q.[division]
AND Q1.[cost] < Q.[cost])+1)<=5))
ORDER BY Q.[division], Q.[cost] DESC;