选择每组前 N 个项目 ms-Access - 更多“Ns”

问题描述

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

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

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

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

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

选择 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].利润 FROM [Abfrage 13_Rank] LEFT JOIN [Abfrage 14_Selected] ON ([Abfrage 13_Rank].Country = [Abfrage 14_Selected].Country) AND ([Abfrage 13_Rank].[产品 3] = [Abfrage 14_Selected].[产品 3]) ([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;

谢谢大家

解决方法

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

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

您可以通过创建 Top N 对象并将最终 SQL 分配给其属性 QueryDef 来实现。

,

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

这里是在以下情况下使用的正确代码:

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

选择 [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)