相关疑难解决方法(0)

Where子句中的SQL Row_Number()函数

Row_Number()在where子句中找到了一个用函数回答的问题.当我尝试一个查询时,我收到以下错误:

"消息4108,级别15,状态1,行1窗口函数只能出现在SELECT或ORDER BY子句中."

这是我试过的查询.如果有人知道如何解决这个问题,请告诉我.

SELECT employee_id 
FROM V_EMPLOYEE 
WHERE row_number() OVER ( ORDER BY employee_id ) > 0 
ORDER BY Employee_ID
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server analytic-functions

86
推荐指数
7
解决办法
21万
查看次数

窗口函数只能出现在SELECT或ORDER BY子句中

任何人都可以解释为什么我们不能在group by子句中使用窗口函数以及为什么它只允许在SELECT和中使用ORDER BY

我试图根据row_number()SQL Server中的一个列对记录进行分组,如下所示:

SELECT Invoice
from table1
group by row_number() over(order by Invoice),Invoice
Run Code Online (Sandbox Code Playgroud)

我收到了一个错误

窗口函数只能出现在SELECT或ORDER BY中

我可以row_number()在SELECT子句中选择它,但我想知道为什么我们不能使用它分组?

sql sql-server

19
推荐指数
2
解决办法
5万
查看次数

窗口函数字段的别名在HAVING和WHERE子句中使用时导致"未找到"错误

考虑以下BigQuery查询:

SELECT
    tn.object AS object_alias,
    tn.attribute1 AS attribute1_alias,
    tn.attribute2 AS attribute2_alias,
    tn.score AS score_alias,
    ROW_NUMBER() OVER (PARTITION BY attribute1_alias, attribute2_alias ORDER BY score_alias DESC) AS row_num_alias
FROM
    [datasetName.tableName] tn
HAVING # also causes error when using WHERE
    row_num_alias <= 20
Run Code Online (Sandbox Code Playgroud)

在此查询中,对子句中的row_num_alias字段的引用HAVING导致以下错误:Field 'row_num_alias' not found.使用HAVING子句替换子句时出现相同的错误WHERE,并且似乎所有窗口函数都抛出此错误.

这是BigQuery中的错误吗?或者我的查询中是否有其他错误?

可能相关:

一种解决方法是将其转换为子查询并将WHERE子句移到子查询之外(见下文),但这看起来很麻烦(并且希望不是必需的).

SELECT
    object_alias,
    attribute1_alias,
    attribute2_alias,
    score_alias,
    row_num_alias
FROM
    (SELECT
        tn.object AS object_alias,
        tn.attribute1 AS attribute1_alias,
        tn.attribute2 AS attribute2_alias, …
Run Code Online (Sandbox Code Playgroud)

sql alias window-functions google-bigquery

2
推荐指数
1
解决办法
603
查看次数