我编写了以下SQL代码,以便在我的Server上运行。
SELECT
atd.DeviceID,
ROW_NUMBER() over(order by atd.deviceid) as rownumber
FROM
dbo.Devices atd
WHERE
(rownumber between 11 and 20);
我得到以下输出:
Msg 207,16级,状态1,第5行
列名“行号”无效。
Msg 207,第16级,状态1,第5行
列名“行号”无效。
如您所见,我希望使用ROW_NUMBER
只获取通常由查询返回的行的子集。我以前从未使用过ROW_NUMBER
函数。
我做错了什么?
发布于 2012-05-31 12:49:59
不能直接使用列的别名,请将其包装在派生表或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);
https://stackoverflow.com/questions/10841050
复制