Alo*_*kin 2 sql t-sql sql-server sql-server-2005 sql-order-by
如何订购数据然后在TSQL(SQL Server)中过滤?
我尝试过这样的事情:
SELECT [Job].*,
ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum
FROM [Job]
ORDER BY Rank
WHERE RowNum >= @Start AND RowNum < @End
Run Code Online (Sandbox Code Playgroud)
不行.我也尝试使用子查询,抛出:
除非还指定了TOP或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效.
我不想使用TOP或FOR XML.
怎么解决这个?
使用CTE.注意,在这种情况下,"内部"ORDER BY由ROW_NUMBER/OVER隐含.
;WITH cBase AS
(
SELECT
[Job].*,
ROW_NUMBER() OVER (ORDER BY [Job].[Date]) AS RowNum
FROM
[Job]
)
SELECT
*
FROM
cBase
WHERE
RowNum >= @Start AND RowNum < @End
--ORDER BY
--output order
Run Code Online (Sandbox Code Playgroud)
编辑:
您在@Start和@End之间的搜索是在ROW_NUMBER日期生成的序列上.Rank与此序列无关.排名(假设它是表中的列)将被忽略,因为您的序列在日期.你不需要对它进行排序.
如果"rank"实际上是"RowNum",那么你仍然不需要"内部"排序,因为它是一个集合操作.不过你最需要的就是它.
如果排名是日期的次要排序,则使用此:
ROW_NUMBER() OVER (ORDER BY [Job].[Date], [Job].[Rank]) AS RowNum
Run Code Online (Sandbox Code Playgroud)