2012-04-10 33 views
0

顯示結果我寫了這個查詢從ROW_NUMBER 2和未來

SELECT 
ROW_NUMBER() OVER (ORDER BY b.s_id) as RN, 
g.code as De, 
f.code as Ar 
from a_c a 
left join ne_a b ON b.n_a_id = a.n_a_id 
left join Sh d ON d.s_id = b.s_id 
left join A g ON g.a_id = a.d_a_id 
left join A f ON f.a_id = a.a_a_id 

where b.s_id = 'MHJIX' 
ORDER BY b.s_id 

,這讓我產生如

RN De AR 

1 S D 
2 D G 
3 G J 

我想顯示從ROW_NUMBER 2日起開始結果。 Row_numbers可以隨時更改。在上面的例子中,共有3行,但在其他例子中可以是5行。 如何顯示從row_number 2開始的結果?
我該怎麼做?

回答

1

你需要的東西像這樣(CTE - 通用表表達式):

;WITH YourCTE AS 
(
    SELECT 
     ROW_NUMBER() OVER (ORDER BY b.s_id) as RN, 
     g.code as De, 
     f.code as Ar, 
     b.s_id 
    FROM a_c a 
    left join ne_a b ON b.n_a_id = a.n_a_id 
    left join Sh d ON d.s_id = b.s_id 
    left join A g ON g.a_id = a.d_a_id 
    left join A f ON f.a_id = a.a_a_id 
    where b.s_id = 'MHJIX' 
) 
SELECT * FROM YourCTE 
WHERE RN >= 2 
ORDER BY s_id 

基本上,你需要「包裝」您的查詢包含ROW_NUMBER()排序函數到一個子查詢或CTE這樣你然後可以引用外部查詢中的新「row_number」列(以使用它來限制最終結果集)。

0

可以使用CTE爲馬克的建議,或者您可以使用派生表:

SELECT b.RN, 
     g.code as De, 
     f.code as Ar 

FROM a_c a 
     LEFT JOIN (SELECT n_a_id, ROW_NUMBER() OVER (ORDER BY b.s_id) AS RN FROM ne_a) b ON b.n_a_id = a.n_a_id 
     LEFT JOIN Sh d ON d.s_id = b.s_id 
     LEFT JOIN A g ON g.a_id = a.d_a_id 
     LEFT JOIN A f ON f.a_id = a.a_a_id 

WHERE b.s_id = 'MHJIX' AND b.RN >= 2 
+0

FROM ne_a_bü認爲這是正確的? – user680865 2012-04-10 15:35:36

+0

對不起,這是一個錯字。我糾正了我的答案。 – 2012-04-10 15:40:28

+0

你們倆都是對的。謝謝:) – user680865 2012-04-10 15:49:43