5
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の使用

4

2 に答える 2

14

次のように、クエリをサブクエリとして使用します。

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の違いを読んでください。実行計画を確認します。

于 2012-02-17T13:09:09.947 に答える
5

あなたはこのようなことをする必要があります:

;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 BYSQL Server 2012には、句に基づいて直接ページングを実行するためのこのANSISQLStandard準拠の表記法があります。詳細とサンプルについては、このブログ投稿(または他の多くの投稿)を参照してください。

于 2012-02-17T13:08:43.540 に答える