SQL Server偏移量和限制

SQL Server偏移量和限制,sql,sql-server,Sql,Sql Server,我正在尝试设置偏移和限制,我尝试了以下操作: SELECT [Job_No] , ROW_NUMBER() OVER (ORDER BY [Job_No]) AS [rownumber] , [BaselineStart] , [BaselineFinish] , [ExpectedStart] , [ExpectedFinish] , [ScheduledStart] , [ScheduledFinish] , [ActualStart] , [Ac

我正在尝试设置偏移和限制,我尝试了以下操作:

SELECT
    [Job_No]
,   ROW_NUMBER() OVER (ORDER BY [Job_No]) AS [rownumber]
,   [BaselineStart]
,   [BaselineFinish]
,   [ExpectedStart]
,   [ExpectedFinish]
,   [ScheduledStart]
,   [ScheduledFinish]
,   [ActualStart]
,   [ActualFinish]
FROM
    [Schedule]
WHERE
    [rownumber] BETWEEN 10 AND 20;
但我得到了这个错误:

列名“rownumber”无效


请帮助。

您应该在查询中添加另一个步骤
ROW_NUMBER()
不能在定义它的同一查询中使用,因此必须将其全部包装在另一个select中,如下面所示。where子句与
FROM
表/查询中的所有字段相关,因此rownumber还不存在

select * from
(SELECT Job_No,
        ROW_NUMBER() OVER(ORDER BY Job_No) AS rownumber,
        BaselineStart, BaselineFinish, ExpectedStart, ExpectedFinish,
        ScheduledStart, ScheduledFinish, ActualStart, ActualFinish
        FROM Schedule)
WHERE rownumber BETWEEN 10 AND 20
使用
CTE

WITH Result AS 
(
SELECT Job_No, 
   ROW_NUMBER() OVER(ORDER BY Job_No) AS rownumber, 
   BaselineStart, 
   BaselineFinish, 
   ExpectedStart, 
   ExpectedFinish, 
   ScheduledStart, 
   ScheduledFinish, 
   ActualStart, 
   ActualFinish 
FROM Schedule
)
SELECT  *
FROM    Result
WHERE   rownumber BETWEEN 10 AND 20

在SQL 2012+中,您可以在
ORDER BY
子句中使用新参数:

SELECT Columns
FROM MyTable
ORDER BY SomeColumn
OFFSET 10 ROWS --this means start with row 11
FETCH NEXT 10 ROWS ONLY  --this means limit the results to the next 10 rows.

因此,从SQLServer2012开始,上面的查询将返回第11-20行,按
SomeColumn

排序,因为没有指定版本

下面是一个使用offset和fetch的版本,下面的代码将忽略前10行,并获取由jobno排序的下10行

SELECT Job_No, 
      BaselineStart, 
   BaselineFinish, 
   ExpectedStart, 
   ExpectedFinish, 
   ScheduledStart, 
   ScheduledFinish, 
   ActualStart, 
   ActualFinish 
FROM Schedule
order by job_no
offset  10 rows fetch next 10 rows only;

不能在where子句中引用窗口函数。您必须将查询移动到子查询,或者将查询移动到cte。对这一点和您的所有查询来说,稍微格式化一下会有很大的帮助。像这样的所有内容都很难阅读。您需要一个嵌套查询才能使用RowNumber我尝试了此操作,但出现了以下错误:“10”附近的语法不正确。我忘了按添加订单,但当我添加订单时,出现了以下错误:Msg 102,级别15,状态1,第2行“OFFSET”附近的语法不正确。Msg 153,15级,状态2,第2行FETCH语句中下一个选项的用法无效。可能是另一个输入错误,我的示例在语法上是正确的。@Dika:更新了我的答案以反映这一点