如何在访问报告详细信息部分中选择前N或在sql子查询中选择前N.

时间:2011-08-04 17:41:33

标签: sql ms-access ms-access-2007 ms-access-2003 ms-access-2010

我有一个基于查询的报告。在报告的详细信息部分中,我想将详细信息行数限制为前N个(如选择TOP N类型查询)。在这个示例中,我想要前2行。我到目前为止的查询是

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

我知道我需要加入并做一些拥有和计数,但它只是没有点击。我还附上了截图。

请指教。谢谢 enter image description here

1 个答案:

答案 0 :(得分:2)

尝试以下查询作为报告记录来源:

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

有关详细信息,请参阅Allen Browne的Subquery Basics


编辑:正如您在评论中提到的那样,这也可以写成如下:

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

您必须确定基准,但第二个版本可能更有效。哪个更具可读性可能是个人偏好的问题(我发现第一个版本更直观,更易读)。