对于我的应用程序,我创建了一个SQL查询生成器,它获得了Where和Order By子句。我想知道如何通过结果分页,也就是说,我想获得一个模板,说明如何通过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 ([Dept] = 'IT')和命令,由条款作为:
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子句,它将返回名称:
安迪,鲍勃,德鲁,弗兰克,汉克和约翰。
如果我在3到6之间放入分页(即),我正确地得到:
德鲁,弗兰克,汉克和约翰
如何添加ORDER BY [Name] DESC以便获得(首先是反转,然后是分页)
弗兰克,德鲁,鲍勃和安迪
发布于 2012-10-24 00:28:12
如果将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 6https://stackoverflow.com/questions/13040414
复制相似问题