【发布时间】:2018-11-22 15:45:25
【问题描述】:
当我在 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 子句中。
【问题讨论】:
-
sum(c)你已经到了那里意味着你需要一个group by sn, ed来使其余的列真正分组,否则不清楚你要做什么。也许您也想打开sum的窗口:sum(c) over (...)。否则你需要另一个子查询。 -
是的!我也想窗口总和。如果我使用 group by sn, ed 那么我不会得到预期的结果。在这种情况下,Row_number 不起作用。
-
你能解释一下你期望从这个查询中得到什么结果吗?
标签: sql sql-server sql-server-2008 sql-server-2012