SQL - 过滤后的顺序

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.

怎么解决这个?

gbn*_*gbn 6

使用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)