Access 2002 - 如何在同一查询中分组依据和前N个记录

时间:2009-05-26 14:09:40

标签: ms-access

我的数据如下所示:

Group     Product    PercentAch
Gr1       Pr1        55%
Gr1       Pr2        65%
Gr2       Pr1        45%
Gr2       Pr2        95%
Gr3       Pr1        15%
Gr3       Pr2        35%
.
.
.

因此,基本上数据描述了一组分配给不同组的不同产品。我正在尝试创建一个查询,它将按组检索基于PercentAch的前N%记录。 Access帮助文件表示按PercentAch排序以使用TOP属性,但这会导致组和产品混合。我的另一个选择是为每个组/产品组合创建一个单独的查询,这似乎是多余的。有没有办法只使用一个(或两个)查询来执行此操作?

5 个答案:

答案 0 :(得分:3)

您需要使用唯一标识符,否则如果您在同一组中有多个产品具有相同的PercentAch,您将获得所有这些产品...即超过您想要的前5%。假设我们在产品上有唯一的ID。 SQL将是:

SELECT Group, ProductID, Product, PercentAch
FROM SalesPerformance
WHERE ProductID IN (
    SELECT TOP 5 PERCENT ProductID
    FROM SalesPerformance as S
    WHERE S.Group = SalesPerformance.Group
    ORDER BY PercentAch DESC
);

答案 1 :(得分:1)

这是你的答案。抱歉,我花了一段时间才想起它。我知道我以前见过这个:

ACC:如何为每个组查询创建前N个值: http://support.microsoft.com/kb/153747

答案 2 :(得分:0)

您需要两个查询。 Top查询需要分组查询的输出。如果您尝试将Top放在与Group相同的查询中,则Top将对原始源数据执行操作,而不是对分组数据执行操作。

答案 3 :(得分:0)

杰伊,这是:

SELECT Group, Product, PercentAch
FROM SalesPerformance
WHERE PercentAch IN (
    SELECT TOP 5 PERCENT PercentAch 
    FROM SalesPerformance as S
    WHERE S.Group = SalesPerformance.Group
    ORDER BY PercentAch DESC
);

你想要每组中前5%的记录,还是前5名?如果您只想要每组中的前5条记录,请从查询中删除PERCENT关键字。

答案 4 :(得分:0)

我一直在努力找出完全相同的问题。结果只是将Product添加到子查询的WHERE子句中。

SELECT Group, Product, PercentAch
FROM SalesPerformance
WHERE PercentAch IN (
    SELECT TOP 5 PERCENT PercentAch 
    FROM SalesPerformance as S
    WHERE S.Group = SalesPerformance.Group and S.Product = SalesPerformance.Product
    ORDER BY PercentAch DESC
);

这给了我每组/产品组合的百分之五的PercentAch值。