如何通过Sum(qty)获取TOP 5数据?解决交叉表查询无法使用TOP报错问题
交叉表查询按Sum(qty)取TOP 5的实现方案
Access的TRANSFORM交叉表查询默认不支持直接在主查询的SELECT子句中使用TOP关键字,可通过子查询过滤的方式实现需求,操作如下:
- 先编写子查询获取按Sum(qty)倒序排名的TOP 5 value1列表,代码如下:
SELECT TOP 5 value1 FROM table1 WHERE value2 BETWEEN value3 AND value4 GROUP BY value1 ORDER BY SUM(qty) DESC
- 将上述子查询作为IN条件加入原交叉表查询的WHERE子句中,修改后的完整查询代码如下:
TRANSFORM SUM(qty) SELECT value1 FROM table1 WHERE value2 BETWEEN value3 AND value4 AND value1 IN ( SELECT TOP 5 value1 FROM table1 WHERE value2 BETWEEN value3 AND value4 GROUP BY value1 ORDER BY SUM(qty) DESC ) GROUP BY value1 PIVOT value2;
注意事项
- 子查询必须加上
ORDER BY SUM(qty) DESC,否则TOP返回的是无序的随机前5条,不是按求和结果排名的前5 - 如果存在多个value1的Sum(qty)并列第5的情况,TOP会自动返回所有并列的行,若需要严格限制只返回5条,可在子查询的ORDER BY后追加唯一字段排序,例如改为
ORDER BY SUM(qty) DESC, value1
内容的提问来源于stack exchange,提问作者xmichal7
相关产品推荐
相关产品推荐

