如何在MS Access查询中复用子查询别名Table1避免语句重复?
解决Access查询中复用子查询别名的问题
你的问题出在Access SQL的别名作用域限制:你定义的Table1是子查询的别名,它只能在自己所在的括号范围内生效,跨子查询或者外层查询无法直接复用这个别名。下面给你两种可行的解决办法:
方法一:创建保存的查询(兼容所有Access版本)
先把重复的汇总逻辑做成一个独立的保存查询,之后直接引用它即可:
- 新建查询,切换到SQL视图,输入以下语句并保存为
qryClassTotalHours:
SELECT Class, Sum(Hours) AS SumOfHours FROM ClassHours GROUP BY Class;
- 主查询直接引用这个保存好的查询:
SELECT Class, 100 * SumOfHours / (SELECT Sum(SumOfHours) FROM qryClassTotalHours) AS Percentage FROM qryClassTotalHours;
方法二:使用CTE公共表表达式(适用于Access 2016及以上版本)
Access 2016及后续版本支持WITH子句定义CTE,能在同一查询内复用别名:
WITH Table1 AS ( SELECT Class, Sum(Hours) AS SumOfHours FROM ClassHours GROUP BY Class ) SELECT Class, 100 * SumOfHours / (SELECT Sum(SumOfHours) FROM Table1) AS Percentage FROM Table1;
这样就不用重复编写相同的子查询代码,实现了别名的复用。
内容的提问来源于stack exchange,提问作者Forklift17
相关产品推荐
相关产品推荐

