2014-11-25 63 views
0

从结果中的rownumber 1开始,我需要返回4个后续行和5个前面的行。 如何在SQL 2012中执行此操作?SQL Server 2012查询返回x当前位置的行数

select ROW_NUMBER() over(Order by Symbol) as row,optionsID,WatchListID,Symbol,CallPut,Strike 
    from STREAMER.dbo.options 
where WatchlistID = 1 and Strike > 119 and CallPut = 'C' 
order by Strike 

enter link description here

+2

在rownumber = 1的行之前是什么定义了一行? – 2014-11-25 14:34:30

+0

我的选项表有几千行。通过上述声明,我发现有Strike> 119和CallPut = C的记录。但是我需要返回总共9条记录的范围;从上面的结果中的第一条记录之前的5条记录,以及来自上述结果的第一条记录的下面4条记录,总共9条 – PtheGr8 2014-11-25 14:35:53

+0

,我必须补充说,所有9条记录需要遵守WatchlistID = 1和Strike> 119和CallPut ='C'条件。 – PtheGr8 2014-11-25 14:45:48

回答

0

您可以使用UNION以5个前面的记录追加到结果集:

select TOP 4 ROW_NUMBER() over(Order by Symbol) as row,optionsID,WatchListID,Symbol,CallPut,Strike 
from STREAMER.dbo.options 
where WatchlistID = 1 and Strike > 119 and CallPut = 'C' 

union all 

select TOP 5 -1 * (ROW_NUMBER() over(Order by Symbol desc)) as row,optionsID,WatchListID,Symbol,CallPut,Strike 
from STREAMER.dbo.options 
where WatchlistID = 1 and Strike <= 119 and CallPut = 'C' 
order by Strike 

您可以通过可选-1乘ROW_NUMBER()第二套,以获得前面记录的否定顺序。

+0

非常感谢你,那个作品,只需要通过OptionsID更改顺序。我正在尝试ROWS Preceding和以下程序,但没有运气。 – PtheGr8 2014-11-25 15:53:55

+0

@ PtheGr8欢迎您。你可以接受这篇文章作为你的问题的答案,如果它真的帮助你解决你的问题,以便其他有类似问题的人可以从这篇文章中受益。 – 2014-11-25 16:29:10

相关问题