选择每组前 N 个项目 ms-Access - MORE "Ns"

Posted

技术标签:

【中文标题】选择每组前 N 个项目 ms-Access - MORE "Ns"【英文标题】:Select top N items per group ms-Access - MORE "Ns" 【发布时间】:2021-06-23 08:21:12 【问题描述】:

我发现与我的问题非常相似,但没有人包含我的问题。

我使用 ms-Acces:我需要为我的组创建排名查询,为每个组选择 TOP N 利润。

问题是每个组的这个“N”不一样,但我需要每次选择不同的Ns...

所以通常的 TOP N 函数对我不起作用……而且 COUNT 也不起作用。 如何根据先前查询([Abfrage 14_Selected])中进行的选择专业组对专业组排名前 N=1 或 2 或 3 等?

这是一个(显然)不起作用的示例,但我不知道如何解决我的问题:

SELECT TOP N [Abfrage 13_Rank].[Product 1], [Abfrage 13_Rank].[Product 2], [Abfrage 13_Rank].[Product 3], [Abfrage 13_Rank].Country, [Abfrage 13_Rank].ProductsCountry, [Abfrage 13_Rank].Profit FROM [Abfrage 13_Rank] LEFT JOIN [Abfrage 14_Selected] ON ([Abfrage 13_Rank].Country = [Abfrage 14_Selected].Country) AND ([Abfrage 13_Rank].[Product 3] = [Abfrage 14_Selected].[Product 3]) AND ([Abfrage 13_Rank].[Product 2] = [Abfrage 14_Selected].[Product 2]) AND ([Abfrage 13_Rank].[Product 1] = [Abfrage 14_Selected].[Product 1]) WHERE N= [Abfrage 14_Selected].Selected;

谢谢大家

【问题讨论】:

【参考方案1】:

你不能。 Top N 和表名和字段名都不能是动态的。

因此,您必须在运行查询之前从代码 (VBA) 创建(或调整)部分或最终 SQL。

您可以通过创建一个QueryDef 对象并将最终的SQL 分配给它的属性SQL 来做到这一点。

【讨论】:

好的,非常感谢...从未使用过 QueryDef,我必须研究一下【参考方案2】:

我自己找到了解决方案,我决定在这里发布它,因为它可能会在将来帮助其他人。

所以这里是正确使用的代码:

    您想从包含许多行的表中选择 TOP N 排名 pro 组, 应选择多少 N 个专业组已在之前的查询中定义。

SELECT [Abfrage 12_Rank].[Product 1], [Abfrage 12_Rank].[Product 2], [Abfrage 12_Rank].[Product 3], [Abfrage 12_Rank].ProductCountry, [Abfrage 12_Rank].Country, [Abfrage 12_Rank].Rank FROM [Abfrage 12_Rank] LEFT JOIN [Abfrage 13_Selected] ON ([Abfrage 12_Rank].[Product 1] = [Abfrage 13_Selected].[Product 1]) AND ([Abfrage 12_Rank].[Product 2] = [Abfrage 13_Selected]。 [产品 2]) AND ([Abfrage 12_Rank].[Product 3] = [Abfrage 13_Selected].[Product 3]) AND ([Abfrage 12_Rank].Country = [Abfrage 13_Selected].Country) WHERE ((([Abfrage 12_Rank].Rank)

【讨论】:

以上是关于选择每组前 N 个项目 ms-Access - MORE "Ns"的主要内容,如果未能解决你的问题,请参考以下文章

mysql每组前N条

无法在 sparksql 中选择每组前 10 条记录

优化获取每组前 n 条记录的方法

Laravel Eloquent/DB 选择每组前 1 行

MySQL 分组后取每组前N条数据

sql分组后取每组前三