我编写了以下 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);
我得到以下输出:
如您所见,我想使用
ROW_NUMBER
仅获取查询通常会返回的行的子集。我以前从未使用过 ROW_NUMBER
函数。我究竟做错了什么?
最佳答案
您不能直接使用列的别名,将其包装在派生表或 CTE 上:
SELECT *
FROM ( SELECT DeviceID,
ROW_NUMBER() over(order by deviceid) as rownumber
FROM dbo.Devices) atd
WHERE (rownumber between 11 and 20);
或者
;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);