如何在访问报告详细信息部分中选择前 N 个或在 sql 子查询中选择前 N 个
Posted
技术标签:
【中文标题】如何在访问报告详细信息部分中选择前 N 个或在 sql 子查询中选择前 N 个【英文标题】:how to select top N in access report detail section or select top N in sql subquery 【发布时间】:2011-08-04 17:41:32 【问题描述】:我有一份基于查询的报告。在报告的详细信息部分,我想将详细信息行的数量限制为前 N。(如选择前 N 类型查询)。在这个示例中,我想要前 2 行。到目前为止我的查询是
SELECT TestTable.[GroupByCol], TestTable.[DetailColA]
FROM TestTable group by TestTable.[GroupByCol], TestTable.[DetailColA]
我知道我需要加入并做一些拥有和计数,但它只是没有点击。我还附上了截图。
请指教。谢谢你
【问题讨论】:
您需要指定ORDER BY
,否则您的“TOP 2”没有意义,因为这可能是随机的。
@cularis。是的。现在从下面 mwolfe02 的回答中可以清楚地看出。谢谢
【参考方案1】:
尝试以下查询作为您的报告记录源:
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(*)
您必须进行基准测试才能确定,但第二个版本可能更有效。哪个更易读可能是个人喜好问题(我发现第一个版本更直观易读)。
【讨论】:
谢谢@mwolfe02。这应该有效。明天测试和更新。是否有另一种方法可以使用 having 子句编写此查询?其实我对这个类似***.com/questions/3481916/access-top-n-in-group的问题感到困惑以上是关于如何在访问报告详细信息部分中选择前 N 个或在 sql 子查询中选择前 N 个的主要内容,如果未能解决你的问题,请参考以下文章
如何将 ms 访问报告的详细信息部分分成两页进行打印预览和打印?
Concat 将详细数据分组到 Reporting Services 中的一行