You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 23:47:46