2010-11-27 2 views
1

조인 수를 포함하는 파생 테이블이 있지만 페이징을 구현하려고하지만 ROW_NUMBER()가 순차적이지 않습니다. 나는 순차적이지 않은 이유를 알고 있지만 순차적 인 방법을 강요하는 방법이 있다고 생각한다.결합이있는 파생 테이블에서 ROW_NUMBER()가 순차적이지 않습니까?

SELECT [Results].[Row1], 
     [Results].[Row2], 
     [Results].[Row3], 
    FROM (
    SELECT [p].[Row1], 
      [p].[Row2], 
      [p].[Row3], 
      ROW_NUMBER() OVER (ORDER BY [p].[Id]) As RowNumber 
    FROM Table1 As [l] 
    JOIN Table2 As [p] ON [l].[fId] = [p].[Id] 
    JOIN Users As [u] ON [p].[fId] = [u].[Id] 
    JOIN Questions As [q] ON [p].[Id] = [q].[fId]) As Results 

감사합니다.

답변

1
with tempTable as (
    SELECT [Results].[Row1], 
      [Results].[Row2], 
      [Results].[Row3], 
     FROM (
     SELECT [p].[Row1], 
       [p].[Row2], 
       [p].[Row3], 
     FROM Table1 As [l] 
     JOIN Table2 As [p] ON [l].[fId] = [p].[Id] 
     JOIN Users As [u] ON [p].[fId] = [u].[Id] 
     JOIN Questions As [q] ON [p].[Id] = [q].[fId]) As Results 

    ) select ROW_NUMBER() OVER (ORDER BY something) As RowNumber, * from tempTable 
1

맨 마지막에 ORDER BY Results.RowNumber을 작성하는 것이 가장 좋은 이유는 무엇입니까?

+0

ROW_NUMBER()가 왜 순차적이지 않은지 이해하지 못한다. – Lukasz

+0

순차적으로 주문하셨습니까? 아니면 용어를 잘못 이해합니까? 그렇다면 쿼리를 정렬하는 방법을 지정하지 않았기 때문입니다. 쿼리 분석기 (인덱스 사용 등 포함)에서 선택한 쿼리 계획에 따라 주문을 유지하지 않는 작업을 사용할 수 있습니다. 'ROW_NUMBER()'는 행을 카운트하고 join을하기 때문에'[p]. [id]'가 같은 행을 가질 수 있지만 고유 한 행 번호가있을 수 있습니다. 'RANK()'또는 다른 함수를 사용하고 싶지 않거나'OVER (ORDER BY)'의 순서를 좀더 구체적으로 지정하십시오. – Lucero

+0

아니, 미안하지만, 순차적으로 말한 것은 ROW_NUMBER()가 1, 2, 3, 4, 5 ... N 대 1, 23, 45, 67, 1345 ... N – Lukasz

관련 문제