代码之家  ›  专栏  ›  技术社区  ›  behzad razzaqi

为什么在sql server ROW_NUMBER()中出现错误?

  •  1
  • behzad razzaqi  · 技术社区  · 8 年前

    我不熟悉SQL Server并编写此查询:

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

    运行该查询时,出现以下错误:

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

    列名“RowNum”无效。

    我怎样才能解决这个问题?

    谢谢大家。

    3 回复  |  直到 8 年前
        1
  •  0
  •   Unnikrishnan R    8 年前

    不能在同一个排名函数结果中筛选 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
    
        2
  •  0
  •   Jatin Patel    8 年前

    试试看,

    SELECT *
    FROM ( SELECT ROW_NUMBER() over (ORDER BY TelNo ) as RowNum, Telno  
            FROM [ClubEatc].[dbo].[GetOnlineBills]
         ) AS tbl
    WHERE RowNum=1
    
        3
  •  0
  •   gofr1    8 年前

    您得到这个错误是因为您不能在WHERE语句中使用计算列allias,甚至不能在 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)