私のアプリケーションでは、Where句とOrder By句を持つSQL クエリ ビルダーを作成しました。結果をページ分割する方法を知りたいです。つまり、SQL クエリの結果をページ分割する方法に関するテンプレートを取得したいと考えています。この説明は少しわかりにくいかもしれません。
テスト テーブルを検討する
CREATE TABLE [dbo].[TestTable](
[RecordID] [int] NOT NULL,
[ID] [nvarchar](1000) NULL,
[Name] [nvarchar](1000) NULL,
[Dept] [nvarchar](1000) NULL
)
INSERT [dbo].[TestTable]
SELECT 1, N'1', N'Andy', N'IT'
UNION ALL
SELECT 2, N'2', N'Bob', N'IT'
UNION ALL
SELECT 3, N'3', N'Camila', N'Sales'
UNION ALL
SELECT 4, N'4', N'Drew', N'IT'
UNION ALL
SELECT 5, N'5', N'Elsie', N'Sales'
UNION ALL
SELECT 6, N'6', N'Frank', N'IT'
UNION ALL
SELECT 7, N'7', N'Gaby', N'Sales'
UNION ALL
SELECT 8, N'8', N'Hank', N'IT'
UNION ALL
SELECT 9, N'9', N'Iris', N'Sales'
UNION ALL
SELECT 10, N'8', N'John', N'IT'
次のようなWhere句があるとしましょう。
WHERE ([Dept] = 'IT')
Order By句は次のとおりです。
ORDER BY [Name] DESC
次のようなものを使用してページネーションを実行しようとしています:
SELECT [RECORDID], [ID], [Name], [Dept], RowNum
FROM (
SELECT [RECORDID], [ID], [Name], [Dept],
ROW_NUMBER() OVER (ORDER BY [RecordID]) AS RowNum
FROM [TestTable] WHERE ([Dept] = 'IT')
) AS [TestTable_DerivedTable]
WHERE [TestTable_DerivedTable].RowNum BETWEEN 3 AND 6 ORDER BY [Name] DESC
ORDER BY [Name] DESC
に入ることができないため、これは機能しません[TestTable_DerivedTable]
。WHERE句があれば、名前が返されます。
アンディ、ボブ、ドリュー、フランク、ハンク、ジョン。
ページネーション、つまりBETWEEN 3 AND 6を入れると、正しく次のようになります。
ドリュー、フランク、ハンク、ジョン
を追加するにはどうすればよいですかORDER BY [Name] DESC
(最初に反転、次にページネーション):
フランク、ドリュー、ボブ、アンディ