ROW_NUMBER() 는 SQL2005에서 추가된 기능으로 정렬한 후에 일련번호를 매겨주는 기능을 한다.
ROW_NUMBER() OVER(ORDER BY 절)
* 반드시 ORDER BY 절이 들어 있어야 한다.
1) over() 구문의 조건과 order by조건이 같은경우
- 가장 이상적인 구문으로써 over()안의 order by 구문과 일반 order by 의 구문이 같을경우가 가장 좋다.
select
ROW_NUMBER() OVER (ORDER BY ZIP, BIRTH DESC) AS ROWNUM,
SN, ID, BIRTH, ZIP
FROM
MEMBER
WHERE
YEAR(BIRTH) < 1990 AND SUBSTRING(ZIP,1,1) = '1'
ORDER BY ZIP, BIRTH DESC
2) over()구문과 order by 의 정렬순서가 다를 경우
해당 내용의 정렬은 일반 ORDER BY 문을 기준으로 정렬이 되고 글번호는 OVER를 기준으로 정렬된다.
고로 내용은 정상적으로 정렬이 되나 일련번호가 거꾸로 작성된다.
select
ROW_NUMBER() OVER (ORDER BY ZIP DESC, BIRTH) AS ROWNUM,
SN, ID, BIRTH, ZIP
FROM
MEMBER
WHERE
YEAR(BIRTH) < 1990 AND SUBSTRING(ZIP,1,1) = '1'
ORDER BY ZIP, BIRTH DESC
3) over()구문과 order by 구문이 완전히 다른 경우
- 쓰지말자!!! 어떻게 나올 것인지 알수가 없다.
댓글 영역