TSQL - 无效的列名称RowNumber

Jud*_*ude 5 sql sql-server

为什么会对'Invalid Column Name'RowNumber 说WHERE.

SELECT Id, Name,
ROW_NUMBER() OVER (ORDER BY Id) AS 'RowNumber'
FROM Folks
WHERE RowNumber=3
Run Code Online (Sandbox Code Playgroud)

虽然可以使用 ORDER BY

SELECT Id, Name
ROW_NUMBER() OVER (ORDER BY Id) AS 'RowNumber'
FROM Folks
ORDER BY RowNumber DESC
Run Code Online (Sandbox Code Playgroud)

Jes*_*aja 8

试试这个:

SELECT  *
FROM    (SELECT Id, Name,
                ROW_NUMBER() OVER (ORDER BY Id) AS 'RowNumber'
         FROM    Folks
        ) AS A
WHERE   RowNumber = 3
Run Code Online (Sandbox Code Playgroud)

  • 'AS A' 搞定了。背后的想法是什么? (2认同)

Gor*_*off 6

你缺少一个逗号:

SELECT f.*
FROM (SELECT Id, Name,
---------------------^
             ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber
      FROM Folks f
     ) f
WHERE RowNumber = 3;
Run Code Online (Sandbox Code Playgroud)

另外,您不能where在同一级别的子句中使用列别名。子查询或 CTE 解决了这个问题。

而且,最好不要对列别名使用单引号。您应该只对字符串和日期常量使用单引号。在这种情况下,rownumber根本不需要转义。