【问题标题】:Why i get error in sql server ROW_NUMBER()?为什么我在 sql server ROW_NUMBER() 中出现错误?
【发布时间】:2016-09-15 07:16:23
【问题描述】:

我是 SQL Server 新手并编写此查询:

SELECT  ROW_NUMBER() over (ORDER BY TelNo ) as RowNum,
        Telno  
FROM [ClubEatc].[dbo].[GetOnlineBills]
where RowNum=1

当我运行那个查询时,我得到了这个错误:

消息 207,第 16 级,状态 1,第 11 行

列名“RowNum”无效。

我该如何解决?

谢谢大家。

【问题讨论】:

    标签: sql sql-server tsql window-functions


    【解决方案1】:

    您不能在同一 select 语句中过滤排名函数结果。 使用下面的脚本。

    with cte_1
    as
    (
    SELECT ROW_NUMBER() over (ORDER BY TelNo ) as RowNum,Telno  FROM [ClubEatc].[dbo].[GetOnlineBills])
    SELECT *
    FROM cte_1
    where RowNum=1
    

    【讨论】:

    • 感谢您的回答,11 分钟后接受您的回答
    • 谢谢你..如果你同意这个答案,也投赞成票.. :)
    【解决方案2】:

    试试这个方法,

    SELECT *
    FROM ( SELECT ROW_NUMBER() over (ORDER BY TelNo ) as RowNum, Telno  
            FROM [ClubEatc].[dbo].[GetOnlineBills]
         ) AS tbl
    WHERE RowNum=1
    

    【讨论】:

      【解决方案3】:

      你得到这个错误是因为你不能在 WHERE 语句中使用计算列别名,甚至不能输入where ROW_NUMBER() over (ORDER BY TelNo ) = 1,因为它是被禁止的。

      您不需要使用 CTE 或子查询,只需使用 TOP 1 WITH TIES 并按 ROW_NUMBER() 排序即可:

      SELECT TOP 1 WITH TIES Telno  
      FROM [ClubEatc].[dbo].[GetOnlineBills]
      ORDER BY ROW_NUMBER() over (ORDER BY TelNo) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-27
        • 1970-01-01
        • 1970-01-01
        • 2014-05-23
        相关资源
        最近更新 更多