문의 드립니다.
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이 되어 데이터 출력이 안됩니다.
당연 하겠죠. 여기서 부터가 고민거리 입니다.
이 경우에는 어떻게 해야 할까요?
Comment 1
-
불타는불쥐[김경진]
2019.07.04 09:38
select * from B
union
select * from C
해당 조건에서 여러 필드의 검색 조건에 대해서 필터 하고 해야 할듯 합니다.