sql语句返回当前行的下一行/上一行

时间:2012-06-08 15:30:02

标签: asp.net sql-server sql-server-2008 select

我相信这在mysql中是可能的,但是sql server 2008怎么样?例如:

   **ID             Type**
   11111          dgf-324-fhj
   11111          sdg-654-fhd
   22222          djg-234-dfh
   23333          uoi-738-sdf

如果type是PK,并且假设我的查询返回第一行11111行,那么如何创建一个将我解析为下一行或上一行的SQL语句?任何帮助或指向正确的方向都会很棒。该计划是asp.net/c#/visual studio 2010,谢谢!

2 个答案:

答案 0 :(得分:2)

请记住,表格表示无序行的集合。因此,除非您指定订单,否则“下一个”和“前一个”的概念没有任何意义。在您的示例中,除非您指定订单,否则不能保证给定的Select语句在dgf-324-fhj之前返回说sdg-654-fhd。但是,让我们假设按类型排序我们可以使用这样的排名函数:

With OrderedItems As
    (
    Select Id, Type, Row_Number() Over ( Order By Type ) As Num
    From SourceData
    )
Select Id, Type
From OrderedItems
Where Num = 2

SQL Fiddle示例

我还要提一下这种方法存在的问题。如果有人在查询第1行后插入一个成为“新”行2的新行,您将得到与预期不同的结果。

答案 1 :(得分:0)

请看这个关于分页的答案:What is the best way to paginate results in SQL Server

如果您想一次执行一行,那么您只需将RowNum过滤器一次更改为1。