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

SQL Server中如何在GROUP BY子句中使用新建计算列?

问题原因与解决方法

为什么会报错?

SQL Server的查询执行顺序是GROUP BY早于SELECT,你在SELECT里定义的myDay和testResult别名,在执行GROUP BY的时候还没被创建,所以系统找不到这两个列。另外你的SELECT里还包含了[name]这个非聚合列,它也必须出现在GROUP BY里,否则同样会触发报错。

两种解决办法

方法1:GROUP BY中直接使用原始表达式

把SELECT里定义myDay和testResult的表达式直接写到GROUP BY里,同时加上[name]:

SELECT
    CAST([EvtTime] as date) AS myDay,
    CASE WHEN [result] LIKE '%test%' THEN 1 ELSE 0 END AS testResult,
    COUNT_BIG(*) AS myCount,
    [name]
FROM [mytable]
GROUP BY CAST([EvtTime] as date), CASE WHEN [result] LIKE '%test%' THEN 1 ELSE 0 END, [name]

方法2:用CTE预处理数据后再分组

先通过公用表表达式(CTE)生成包含别名的中间结果,再对中间结果执行GROUP BY:

WITH CTE_Preprocessed AS (
    SELECT
        CAST([EvtTime] as date) AS myDay,
        CASE WHEN [result] LIKE '%test%' THEN 1 ELSE 0 END AS testResult,
        [name]
    FROM [mytable]
)
SELECT
    myDay,
    testResult,
    COUNT_BIG(*) AS myCount,
    [name]
FROM CTE_Preprocessed
GROUP BY myDay, testResult, [name]

内容的提问来源于stack exchange,提问作者n179911a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:35:21