Как выбрать верхний N в разделе подробных отчетов доступа или выбрать верхний N в подзапросе SQL - PullRequest
1 голос
/ 04 августа 2011

У меня есть отчет, основанный на запросе. В подробном разделе отчета я хочу ограничить количество строк подробностей до верхней буквы N. (например, запрос типа TOP N). В этом примере я хочу 2 верхних ряда. Запрос у меня до сих пор это

 SELECT TestTable.[GroupByCol], TestTable.[DetailColA]
 FROM TestTable group by TestTable.[GroupByCol], TestTable.[DetailColA]

Я знаю, что мне нужно присоединиться и сделать несколько подсчетов, но это просто не клик. Я также приложил скриншот.

Пожалуйста, сообщите. благодарю вас enter image description here

1 Ответ

2 голосов
/ 04 августа 2011

Попробуйте следующий запрос в качестве источника записей отчета:

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(*) 

Вы должны были бы сделать эталонный тест, чтобы быть уверенным, но эта вторая версия, вероятно, более эффективна.Что является более читабельным, вероятно, является вопросом личных предпочтений (я считаю, что первая версия более понятна и понятна).

...