Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as 'RowNo'
from customers
where RowNo between 50 AND 60
50〜60の行のサブセットを選択しようとしています。問題は、「RowNo」が無効な列名であるということです。
ありがとうございました
SQL SERVER2008R2の使用
Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as 'RowNo'
from customers
where RowNo between 50 AND 60
50〜60の行のサブセットを選択しようとしています。問題は、「RowNo」が無効な列名であるということです。
ありがとうございました
SQL SERVER2008R2の使用
次のように、クエリをサブクエリとして使用します。
select * from (
Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as [RowNo]
from customers
) t
where RowNo between 50 AND 60
CTEも使用できますが、どちらかを選択するかどうかは、CTEとSubQueryの違いを読んでください。実行計画を確認します。
あなたはこのようなことをする必要があります:
;WITH PaginatingData AS
(
Select id, name, ROW_NUMBER() OVER (ORDER BY id asc) as 'RowNo'
from customers
)
SELECT *
FROM PaginatingData
where RowNo between 50 AND 60
CTE(共通テーブル式-一種の「インラインビュー」)を「ラッパー」として使用して、RowNo
が有効な列名になるようにします。
見通しとして-SQLServer2012を使用すると、次のように記述できます。
SELECT
id, name
FROM
dbo.customers
ORDER BY
id
OFFSET 50 ROWS
FETCH NEXT 10 ROWS ONLY
ORDER BY
SQL Server 2012には、句に基づいて直接ページングを実行するためのこのANSISQLStandard準拠の表記法があります。詳細とサンプルについては、このブログ投稿(または他の多くの投稿)を参照してください。