문의 드립니다.

MSSQL에서 ROW_NUMBER를 사용해 페이징을 할 경우에 대한 문의 입니다.


두개의 테이블을 union 한 가상의 테이블에서 ROW_NUMBER를 사용해 페이징 할 경우 아래와 같은 상황에서 페이징처리를

어찌하면 될까요?


예를 들어


A라는 한개의 테이블에서 여러가지 조건에 의해 전혀다른 타 테이블과 join하여 

B와 C 데이터 테이블로 나눕니다.


그래서 아래와 같이 유니온으로 합쳐서 D 테이블을 만듭니다.


select * from (

   select * from B

   union

   select * from C

) D


그리고 ROW_NUMBER를 사용해 페이징을 하기위해서 (index라는 고유필드값을 기준으로)


select ROW_NUMBER() OVER (order By index asc) AS RowNum,, * from (

   select * from B

   union

   select * from C

) D where RowNum>=1 and RowNum<=20


상기처럼 하면 index값이 1~20의 값 범위에서 데이터를 출력해 옵니다.

그런데, 여러 필드의 검색조건으로 검색을 할 경우 ROW_NUMBER를 index 값으로 하기 때문에

검색되는 결과 index값이 1~20 범위 밖에 있으면 검색결과가 0이 되어 데이터 출력이 안됩니다.

당연 하겠죠. 여기서 부터가 고민거리 입니다.


이 경우에는 어떻게 해야 할까요?