4

SQL Server で実行する次の SQL コードを作成しました。

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_NUMBER、クエリによって通常返される行のサブセットのみを取得するために使用したいと考えています。私はこれまでそのROW_NUMBER機能を使用したことがありません。

私は何を間違っていますか?

4

1 に答える 1

14

列のエイリアスを直接使用することはできません。派生テーブルまたは 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);
于 2012-05-31T20:49:59.420 に答える