0

私のアプリケーションでは、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最初に反転、次にページネーション)

フランク、ドリュー、ボブ、アンディ

4

1 に答える 1

2

をウィンドウ関数に移動するORDER BY [Name] DESCと、必要なものが得られます。

SELECT [RECORDID], [ID], [Name], [Dept], RowNum  
FROM
(
   SELECT [RECORDID], [ID], [Name], [Dept]
      , ROW_NUMBER() OVER (ORDER BY [Name] DESC) AS RowNum 
   FROM [TestTable] WHERE  ([Dept] = 'IT') 
) AS [TestTable_DerivedTable] 
WHERE [TestTable_DerivedTable].RowNum BETWEEN 3 AND 6
于 2012-10-24T00:28:12.670 に答える