2012-04-10 8 views
0

Ich habe diese Abfrage geschriebenAnzeige der Ergebnisse von row_number 2 und nächsten

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 

und es gibt mir das Ergebnis als

RN De AR 

1 S D 
2 D G 
3 G J 

Ich will Ergebnisse anzuzeigen, die von Row_Number 2 beginnen und ab. Zeilennummern können immer geändert werden. Im obigen Beispiel gibt es insgesamt 3 Zeilen, in einem anderen Beispiel jedoch 5 Zeilen. Wie kann ich Ergebnisse anzeigen, die ab row_number 2 beginnen?
Wie kann ich das tun?

Antwort

1

Sie brauchen so etwas wie dieses (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 

Grundsätzlich müssen Sie zu "wickeln" Ihre Abfrage, die die ROW_NUMBER() Ranking-Funktion in eine Unterabfrage oder CTE enthält, so dass Sie kann dann auf die neue "row_number" -Spalte in der äußeren Abfrage verweisen (um damit Ihre Endergebnismenge zu begrenzen).

0

Sie können einen CTE verwenden, wie Marc vorgeschlagen, oder Sie können eine abgeleitete Tabelle verwenden:

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

VON ne_a_b u denke, das ist richtig? – user680865

+0

Sorry, das war ein Tippfehler. Ich habe meine Antwort korrigiert. –

+0

Sie sind beide richtig. Danke :) – user680865

Verwandte Themen