首页 > 解决方案 > 使用聚合函数时 CTE 行为异常

问题描述

当我在 CTE 中使用聚合函数时,我收到一条错误消息。下面是查询和与之关联的错误消息。当我删除聚合函数时它工作正常。某处我错过了诀窍。

代码:

;
With CTE as (
    Select
        sn,
        ed,
        sum(c) c,
        row_number() over (partition by sn, ed order by sn, sum(c) desc, ed) rn
    from TD
    where ed >= '11/15/2018'
)
select * from CTE

错误信息:

TD.sn在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 group by 子句中。

标签: sqlsql-serversql-server-2008sql-server-2012

解决方案


您在查询中使用了聚合函数但未使用 group by

With CTE as (
    Select
        sn,
        ed,
        sum(c) c,
        row_number() over (partition by sn order by  sum(c) desc) rn
    from TD
    where ed >= '11/15/2018'
   group by sn,
        ed
)
select * from CTE where rn<=3

推荐阅读