Попробуйте следующий запрос в качестве источника записей отчета:
SELECT TestTable.GroupByCol, TestTable.DetailColA
FROM TestTable
WHERE TestTable.DetailColA IN
(SELECT TOP 2 DetailColA FROM TestTable AS TT
WHERE TT.GroupByCol=TestTable.GroupByCol
ORDER BY TT.DetailColA)
ORDER BY TestTable.GroupByCol, TestTable.DetailColA
См. Основы подзапроса Аллена Брауна для получения дополнительной информации.
РЕДАКТИРОВАТЬ: Как вы упоминалив вашем комментарии это также может быть записано следующим образом:
SELECT a.GroupByCol, a.DetailColA, COUNT(*) As RankNumber
FROM TestTable AS a INNER JOIN TestTable AS b
ON a.GroupByCol = b.GroupByCol
AND a.DetailColA >= b.DetailColA
GROUP BY a.GroupByCol, a.DetailColA
HAVING COUNT(*)<=2
ORDER BY a.GroupByCol, a.DetailColA, COUNT(*)
Вы должны были бы сделать эталонный тест, чтобы быть уверенным, но эта вторая версия, вероятно, более эффективна.Что является более читабельным, вероятно, является вопросом личных предпочтений (я считаю, что первая версия более понятна и понятна).