2014-11-25 70 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