我的数据如下所示:
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属性,但这会导致组和产品混合。我的另一个选择是为每个组/产品组合创建一个单独的查询,这似乎是多余的。有没有办法只使用一个(或两个)查询来执行此操作?
答案 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值。