데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
row_number() 로 페이징 할 때 숫자를 역순으로 보여주고 싶습니다.
하지만 10개씩 보여준다고 가정했을 때
첫 페이지는 10, 9, 8.... 1 이렇게 나오고
두번째 페이지는 20, 19, 18. 11 이런식으로 나오네요.
제가 원하는 것은 첫페이지 20, 19, 18..
두번째 페이지 10, 9, 8....
이런식으로 전체를 역순으로 보여주고 싶은데 잘안되네요
쿼리는 대략 이런식으로 작성하였어요.
ASC 일 때는 차례대로 잘 정렬되는데
DESC 일 때는 위와 같이 제가 원하는데로 정렬이 되지 않네요.
SELECT @TOTAL_COUNT = COUNT(*) FROM ABC(NOLOCK)
;WITH RESULT_SET AS (
SELECT ROW_NUMBER() OVER (ORDER BY DATE DESC) AS ROW_NUM, USE
FROM ABC
)
SELECT ROW_NUM,
FROM RESULT_SET
WHERE ROW_NUM BETWEEN (((@PAGE - 1) * @PAGESIZE) + 1) AND (@PAGE * @PAGESIZE)
ORDER BY ROW_NUM ASC
Comment 6
-
항해자™
2015.01.05 10:45
-
흑흑
2015.01.05 13:47
답변 감사합니다.
row_number 구하는 구분에서는 어떻게해야할지 잘 모르겠네요..
-
건우아빠
2015.01.05 22:43
Row_number을. 두가지로. 나오게하시고
Asc desc두개로.
조회는. Desc 로. 보여주는건. Asc 로.
소트는. Desc 로
-
흑흑
2015.01.06 09:41
답변 감사합니다.
말씀해주신 방법으로 해봤는데 제가 잘못했는지 안되네요.
1페이지는 10~1, 2페이지는 20~11 이런식으로 보여지네요..
-
항해자™
2015.01.06 14:43
본문의 쿼리에서 select @TOTAL_COUNT - row_num + 1,,,,,,, 하면 되는거 아니에요?? -
건우아빠
2015.01.06 20:46
declare @PAGE int , @PAGESIZE int ;set @PAGE = 1set @PAGESIZE = 10 ;with res as(select 'N01' no union allselect 'N02' no union allselect 'N03' no union allselect 'N04' no union allselect 'N05' no union allselect 'N06' no union allselect 'N07' no union allselect 'N08' no union allselect 'N09' no union allselect 'N10' no union allselect 'N11' no union allselect 'N12' no union allselect 'N13' no union allselect 'N14' no union allselect 'N15' no union allselect 'N16' no union allselect 'N17' no union allselect 'N18' no union allselect 'N19' no union allselect 'N20' no ) ,result as (select * , ROW_NUMBER() over ( order by no asc ) rownum1 , ROW_NUMBER() over ( order by no desc ) rownum2from res )select *from resultwhere rownum2 BETWEEN (((@PAGE - 1) * @PAGESIZE) + 1) AND (@PAGE * @PAGESIZE)
어플에서 (전체-줄번호)+1 하셔도 되구요,,
row_number 구하는 구문에 사용하셔도 되겠네요,,