0
对于我的应用程序创建一个SQL查询生成器已得到当和顺序按条款。我想知道如何对结果进行分页,即我想获得有关如何通过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 ([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
让我得到(首先逆转,然后分页):
弗兰克,德鲁,Bob和安迪
谢谢** **亚当为我工作。 –