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 구하는 구문에 사용하셔도 되겠네요,,