Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sql server中的行编号从表中获取行_Sql_Sql Server_Sql Server 2008_Sql Server 2005 - Fatal编程技术网

使用sql server中的行编号从表中获取行

使用sql server中的行编号从表中获取行,sql,sql-server,sql-server-2008,sql-server-2005,Sql,Sql Server,Sql Server 2008,Sql Server 2005,我想在SQLServer2008中从我的表中获取100-150行,如何才能做到这一点?有什么办法吗?mysql中有很多i search Limit关键字,但对于sql server,请使用公共表技术,但我不想这样做。mysql中还有其他可用的方法吗?使用sql Limit 在SQL 2005及更高版本中,有一个行数函数。如果您需要同时适用于MySQL和SQL Server的东西,那么我不知道MySQL中是否有这种功能,因为我从未使用过它 链接页面中给出的最相关的示例如下,其中查询结果按日期排序,

我想在SQLServer2008中从我的表中获取100-150行,如何才能做到这一点?有什么办法吗?mysql中有很多i search Limit关键字,但对于sql server,请使用公共表技术,但我不想这样做。mysql中还有其他可用的方法吗?

使用sql Limit


在SQL 2005及更高版本中,有一个行数函数。如果您需要同时适用于MySQL和SQL Server的东西,那么我不知道MySQL中是否有这种功能,因为我从未使用过它

链接页面中给出的最相关的示例如下,其中查询结果按日期排序,然后返回该结果集中的第50到60行

USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
    FROM Sales.SalesOrderHeader 
) 
SELECT SalesOrderID, OrderDate, RowNumber  
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;

实际上,最便宜的方法是使用top,然后使用row_number

select *
from (select *,  row_number() over (order by (select NULL)) as rownum
      from (select top 150 t.*
            from t
           ) t
     ) t
where rownum >= 100
不过,我要提醒你一点。在关系表中不存在行100-150这样的事情,因为它们本质上是无序的。您需要指定顺序。为此,您需要通过以下方式订购:

select *
from (select *,  row_number() over (order by <field>) as rownum
      from (select top 150 t.*
            from t
            order by <field>
           ) t
     ) t
where rownum >= 100

@要用表中的列替换的列可以用来排序结果

我想知道SQL Server中的一些相同的东西,而不是im mysql删除mysql标记,因为它让人困惑:Row_Number返回最后输入的行,就像identity method do it一样,我们无法给出行数,例如100-120或20-25,etcI在我的答案中添加了一个示例以使其更清楚。它似乎满足了您的要求:从select返回指定范围的行。
select * from
(select row_number() over (order by @column) as row,*  from  Table) as t
where row between 100 and 150