Study/DATABASE

[MSSQL] row_number를 이용한 페이징 쿼리( MS-SQL 2005 이상 )

촉촉한초코니 2013. 2. 24. 00:38
728x90
반응형

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  에서 복사해왔음

 

 

 

 

 

728x90
반응형

'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