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 错误的主要内容,如果未能解决你的问题,请参考以下文章
Sql Query 在其中使用 row_number 时给出错误缺少运算符
为啥我在 sql server ROW_NUMBER() 中出现错误?