我在Windows Server 2008上使用SQL Server 2008 Enterprise。我想从前11到前20选择结果(例如,我只对第11到第20个结果感兴趣)。任何想法如何有效地在tsql中编写这个查询?
提前谢谢, 乔治答案 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