无法将MS Access分组查询转换为SQL Server查询求助(分组列不可修改)
解决MS Access查询转SQL Server的问题
没问题,我来帮你搞定这个转换!你的核心诉求是不修改GROUP BY子句列的前提下,把Access的聚合查询转成SQL Server兼容的版本,你尝试CTE没成功,大概率是因为Access和SQL Server在SELECT子句的别名引用规则上有差异——Access允许在同一个SELECT里直接用刚定义的别名计算其他列,但SQL Server严格遵循ANSI SQL标准,不支持这种写法。
下面给你两种完全符合要求的解决方案:
方案1:直接重复聚合函数(最简单)
这种写法不需要CTE,直接在派生列里重复SUM计算,GROUP BY子句和原查询完全一致:
SELECT SUM(ZABC.M) AS M, SUM(ZABC.D) AS D, ZABC.ACC_NUMBER, ZABC.PROJECT_NUMBER, SUM(ZABC.M) - SUM(ZABC.D) AS RM, SUM(ZABC.D) - SUM(ZABC.M) AS RD FROM ZABC GROUP BY ZABC.ACC_NUMBER, ZABC.PROJECT_NUMBER ORDER BY ZABC.PROJECT_NUMBER;
方案2:使用CTE(更清晰的分层写法)
如果你更倾向于用CTE,我们可以把聚合逻辑和派生列计算分开:先在CTE里完成分组聚合,得到M和D的汇总值,再在外部查询里计算RM和RD。这样GROUP BY的列依然保持原样,完美满足你的要求:
WITH AggregatedData AS ( SELECT SUM(M) AS M, SUM(D) AS D, ACC_NUMBER, PROJECT_NUMBER FROM ZABC GROUP BY ACC_NUMBER, PROJECT_NUMBER ) SELECT M, D, ACC_NUMBER, PROJECT_NUMBER, M - D AS RM, D - M AS RD FROM AggregatedData ORDER BY PROJECT_NUMBER;
这两种写法都能得到和原Access查询完全一致的结果,而且严格遵守了你“不修改GROUP BY子句列”的要求。
内容的提问来源于stack exchange,提问作者xamo
相关产品推荐
相关产品推荐

