SQL Server OFFSET等效

时间:2010-07-10 13:43:45

标签: sql tsql sql-server-2008

我在Windows Server 2008上使用SQL Server 2008 Enterprise。我想从前11到前20选择结果(例如,我只对第11到第20个结果感兴趣)。任何想法如何有效地在tsql中编写这个查询?

提前谢谢, 乔治

4 个答案:

答案 0 :(得分:17)

不幸的是,SQL Server没有提供类似于MySQL OFFSET语法的任何内容。但是,您可能希望尝试使用派生表,如下所示:

SELECT some_field
FROM   (
          SELECT some_field, ROW_NUMBER() OVER (ORDER BY some_id) AS rownum
          FROM   table
       ) AS t
WHERE  t.rownum BETWEEN 11 AND 20

答案 1 :(得分:5)

请参阅以下解决方案仅适用于SQL Server 2012及更高版本。

在sql server中限制偏移量:

SELECT email FROM myTable
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;

// offset - no。跳过的行

// next - 要求不。下一行

答案 2 :(得分:2)

假设排序字段PK,

select top 10 * from MyTable
where PK not in (select top 10 PK from Mytable order by PK)
order by PK

编辑:这是一个变种

select top 10 * from 
(select top 20 * from MyTable order by PK) as MySelection
order by PK desc

答案 3 :(得分:0)

您可以使用offset并从SQL Server 2012开始获取下一条语句。

从雇员订单中选择empname,按empname偏移量2行,仅提取接下来的5行;

您可以查看实用的https://youtu.be/EqHkAiiBwPc