0

私はこのクエリを書きました

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 行になる場合もあります。行番号 2 以降の結果を表示するにはどうすればよいですか?
どうやってやるの?

4

2 に答える 2

1

次のようなものが必要です (CTE - Common Table Expression):

;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」列を参照できるようにする必要があります (最終結果セットを制限するために使用します)。

于 2012-04-10T14:34:07.967 に答える
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
于 2012-04-10T14:40:24.357 に答える