1
SELECT [Column1] FROM VIEW1 WHERE ROW_NUMBER = 5;

给出一个错误:

消息 207,级别 16,状态 1,第 2 行无效的列名称“ROW_NUMBER”。

关于为什么的任何建议?ROW_NUMBER 自动以粉红色着色,这意味着据我所知“关键字” - 那么为什么 Sql Server 认为它应该是一个列并说该列不存在?

先感谢您。

4

4 回答 4

5

您不能ROW_NUMBER在这种情况下使用。ROW_NUMBER在这里可以看到在 WHERE 子句中使用的示例:

USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
    FROM Sales.SalesOrderHeader 
) 
SELECT SalesOrderID, OrderDate, RowNumber  
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;

来源:http: //msdn.microsoft.com/en-us/library/ms186734.aspx

于 2012-07-18T08:54:12.897 回答
5

您处理查询的方式是错误的,因为

ROW_NUMBER 返回结果集分区内行的序号,每个分区的第一行从 1 开始。

你可以试试

Select 
from 
(
        Select row_number() over (partition by x order by x)SrNo,* from x
)A
where A.SrNo=1
于 2012-07-18T08:59:45.953 回答
1

你不能像那样使用 ROW_NUMBER()

SELECT * FROM 
(
    SELECT [Column1], ROW_NUMBER() OVER(ORDER By [Column1] ASC) As Row
    FROM VIEW1
) x
WHERE Row = 5;
于 2012-07-18T08:58:21.907 回答
0

你必须先定义ROW_NUMBER。试试这个...

SELECT [column1] FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber,
    [column1]
  FROM <tablename>
) AS xyz
WHERE rownumber = 5

例如:

SELECT EmpName FROM (
  SELECT
    ROW_NUMBER() OVER (ORDER BY empId ASC) AS rownumber,
    EmpName
  FROM EmpMaster
) AS EmpTable
WHERE rownumber = 5

您可以使用View而不是Table

于 2012-07-18T09:36:14.443 回答