显示row_number 2和next的结果

时间:2012-04-10 14:30:32

标签: sql-server-2008 tsql

我写了这个查询

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开始的结果? 我怎样才能做到这一点?

2 个答案:

答案 0 :(得分: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”列(以便使用它)限制你的最终结果集。)

答案 1 :(得分:0)

您可以像Marc建议的那样使用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