为什么在SQL Server中使用行号时出错?
我已经编写了以下SQL代码以在我的SQL Server上运行为什么在SQL Server中使用行号时出错?,sql,sql-server,Sql,Sql Server,我已经编写了以下SQL代码以在我的SQL Server上运行 SELECT atd.DeviceID, ROW_NUMBER() over(order by atd.deviceid) as rownumber FROM dbo.Devices atd WHERE (rownumber between 11 and 20); 我得到以下输出: 味精207,16级,状态1,第5行 列名“rownumber”无效。 味精207,16级,状态1,第5行 列名“row
SELECT
atd.DeviceID,
ROW_NUMBER() over(order by atd.deviceid) as rownumber
FROM
dbo.Devices atd
WHERE
(rownumber between 11 and 20);
我得到以下输出:
味精207,16级,状态1,第5行列名“rownumber”无效。
味精207,16级,状态1,第5行
列名“rownumber”无效 如您所见,我想使用
ROW\u NUMBER
只获取通常由查询返回的行的子集。我以前从未使用过行号
功能
我做错了什么?您不能直接使用列的别名,请将其包装在派生表或CTE上:
SELECT *
FROM ( SELECT DeviceID,
ROW_NUMBER() over(order by deviceid) as rownumber
FROM dbo.Devices) atd
WHERE (rownumber between 11 and 20);
或
运行答案中给出的第一个查询会导致以下错误:
无法绑定多部分标识符“atd.DeviceID”
@Daniel只需去掉DeviceID列的atd前缀。Downvoter,Downvoter是否仅仅是因为列上的前缀?
;WITH CTE AS
(
SELECT DeviceID,
ROW_NUMBER() over(order by deviceid) as rownumber
FROM dbo.Devices
)
SELECT *
FROM CTE
WHERE (rownumber between 11 and 20);