row_number를 이용한 페이징 쿼리( MS-SQL 2005 이상 )
MS-SQL 2005 이상에서는 row_number 함수가 제공된다.
검색결과리스트에 행 번호를 매겨주는 기능인데, 이 기능을 이용해서 페이징 처리를 할 수가 있다.
변수설명
@currentPage int -- 보고자 하는 페이지
@rowSize int -- 한페이지에 표시되는 레코드갯수
select top(@rowSize) resultTable.* from
( select top (@rowSize*@currentPage) ROW_NUMBER() over (order by mykey desc) as rownumber, field1, field2, field3 from tMyTable ) as resultTable
where rownumber>(@currentPage-1)*@rowSize
즉, tMyTable이란 테이블에서 mykey를 역순으로 정렬하여서 @currenntPage 번째 페이지 데이터를 가져오는 것이다. ( 참고로, top은 뒤에 숫자를 변수로 처리할수 없었는데, 2005부터인가... top (~) 형식으로 지원이 된다. )
핵심은 row_number() over ( 정렬조건 ) 구문인데,
정렬조건에 따라 테이블을 정렬하여 순차적으로 번호를 매기는 동작을 하게 된다.
한구문 한구문 풀어보면...
1. 다음과 같이 쿼리를 날리게 되면 rownumber가 자동으로 매겨짐을 확인할 수 있다.
select ROW_NUMBER() over(order by mykey desc), field1, field2, field3 from tMyTable
2. 열이름을 정하여 where절에서 사용하기 위해서 rownumber로 이름을 정한다.
select ROW_NUMBER() over (order by mykey desc) as rownumber, field1, field2, field3 from tMyTable
3. 위 결과중에서 첫페이지부터 보고자하는 페이지까지의 데이터를 가져온다. ( 이전페이지까지의 데이터는 나중에 where 절로 추려낸다. )
select top (@rowSize*@currentPage) ROW_NUMBER() over (order by mykey desc) as rownumber, field1, field2, field3 from tMyTable
4. 위 결과들 중에서 표시할 갯수만큼의 데이터를 가져온다.
select top @rowSize resultTable.* from
( select top (@rowSize*@currentPage) ROW_NUMBER() over (order by mykey desc) as rownumber, field1, field2, field3 from tMyTable ) as resultTable
5. 조건을 줘서 보고자 하는 페이지에 해당하는 위치부터 가져오도록 조건절을 준다.
select top @rowSize resultTable.* from
( select top (@rowSize*@currentPage) ROW_NUMBER() over (order by mykey desc) as rownumber, field1, field2, field3 from tMyTable ) as resultTable
where rownumber>(@currentPage-1)*@rowSize
---------------------------------------------
http://blog.naver.com/PostView.nhn?blogId=junohda&logNo=60175798740
--------------------------------------------------
http://devroid.com/80182482851 에서 복사해왔음
'Study > DATABASE' 카테고리의 다른 글
[MSSQL] replace 로 글자 바꾸기 (0) | 2013.12.19 |
---|---|
[MSSQL] ISDATE() (0) | 2013.10.07 |
[MSSQL] INSERT INTO 테이블 (0) | 2013.04.25 |
[MSSQL] 쿼리의 종류 (0) | 2013.04.05 |
[MSSQL] GETDATE() 사용시 select 포맷 변경 (0) | 2013.02.22 |