选择每组前 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"的主要内容,如果未能解决你的问题,请参考以下文章