【问题标题】:ROW_NUMBER() Sql errorROW_NUMBER() Sql 错误
【发布时间】: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”无效。

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

【问题讨论】:

    标签: sql-server-2008


    【解决方案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”!
        猜你喜欢
        • 2018-10-16
        • 2012-07-17
        • 2016-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-31
        相关资源
        最近更新 更多