【发布时间】:2012-12-16 04:29:05
【问题描述】:
谁能解释为什么我们不能在group by 子句中使用窗口函数以及为什么它只允许在SELECT 和ORDER BY 中使用
我试图根据row_number() 和 SQL Server 中的列对记录进行分组,如下所示:
SELECT Invoice
from table1
group by row_number() over(order by Invoice),Invoice
我收到一个错误
窗口函数只能出现在 SELECT 或 ORDER BY
我可以在 SELECT 子句中选择这个row_number(),但我想知道为什么我们不能分组使用它?
【问题讨论】:
-
按
row_number()分组有什么意义?每个项目将单独在一个组中。不过,这个问题很合理。 -
如果我有重复的发票要考虑,在这种情况下我也想保留它。你可以想,那我为什么要分组。问题是我想知道为什么会这样?为什么我们不能在 group by 中使用窗口函数?
-
它将如何产生歧义。你可以解释吗?如果我只想在 where 子句中选择排名值 2。怎么会造成歧义
-
那么你想在 where 子句中使用它而不是 group by then?
-
窗口函数在 ANSI 规范中定义为在处理
GROUP BY, HAVING, WHERE之后逻辑执行,我猜他们可以用另一种方式定义它并允许GROUP BY使用在与SELECT使用的窗口不同,但这肯定会很混乱?
标签: sql sql-server