ROW_NUMBER() Sql 错误

Posted

技术标签:

【中文标题】ROW_NUMBER() Sql 错误【英文标题】:ROW_NUMBER() Sql error 【发布时间】:2015-08-27 04:10:09 【问题描述】:

我正在处理我的项目,我必须创建一个 sql 查询来实现我的目标。但不幸的是,当我运行查询时出现错误。

这是我的 Sql 查询:

select ROW_NUMBER() 
OVER (ORDER BY Advertisement.AdsDate asc ) AS AdsIndex 
,Advertisement.AdsId , Advertisement.AdsEnTitle from Advertisement
where Advertisement.Status=N'True' and AdsIndex<=17 and AdsIndex>=11

错误:

列名“AdsIndex”无效。

我应该如何解决我的问题?

【问题讨论】:

【参考方案1】:

你不能在 Where 子句中得到 Rowno。你必须 cte 或子查询

with cte as
(
select ROW_NUMBER() 
OVER (ORDER BY Advertisement.AdsDate asc ) AS AdsIndex 
,Advertisement.AdsId , Advertisement.AdsEnTitle from Advertisement
where Advertisement.Status=N'True' 
)

select * from cte where  AdsIndex between 11 and 17

【讨论】:

【参考方案2】:

您不能在 where 子句中引用 ROW_NUMBER。请参阅此相关帖子:

SQL Row_Number() function in Where Clause

尝试将上面的查询包装在 CTE 或子查询中并从那里过滤。

编辑:这里有更多背景:

Row_Number Over Where RowNumber between

【讨论】:

【参考方案3】:

使用子查询:

;with cte as(
             select ROW_NUMBER() OVER (ORDER BY AdsDate asc ) AS AdsIndex, 
                    AdsId, 
                    AdsEnTitle 
             from Advertisement
             where Status=N'True')
select * from cte
where AdsIndex<=17 and AdsIndex>=11

或者:

select * from (select ROW_NUMBER() OVER (ORDER BY AdsDate asc ) AS AdsIndex, 
                    AdsId, 
                    AdsEnTitle 
               from Advertisement
               where Status=N'True') as cte
where AdsIndex<=17 and AdsIndex>=11

【讨论】:

它说:无法绑定多部分标识符“cte.Status”!

以上是关于ROW_NUMBER() Sql 错误的主要内容,如果未能解决你的问题,请参考以下文章

解析函数:ROW_NUMBER( )

ROW_NUMBER() Sql 错误

Sql Query 在其中使用 row_number 时给出错误缺少运算符

为啥我在 sql server ROW_NUMBER() 中出现错误?

为啥这不起作用:使用 "With ROW_NUMBER" 插入 SQL 语句。错误是关键字“With”附近的语法不正确

Row_number 语法错误 (Wordpress)