상세 컨텐츠

본문 제목

ROW_NUMBER(Transact-SQL)

DataBase/MS-SQL

by xarfox 2009. 10. 13. 14:06

본문

SQL Server 2005 온라인 설명서  
ROW_NUMBER(Transact-SQL)  

SELECT ROW_NUMBER ( )     OVER ( PARTITION BY PART_NO ORDER BY STK_YM ASC) AS SEQ_NO,
       STK_YM, PART_NO, GD_IM_QTY       
FROM dbo.EIV_STOCK

결과 집합 파티션 내의 행 일련 번호를 반환합니다. 각 파티션의 첫 번째 행은 1로 시작합니다. 
Transact-SQL 구문 표기 규칙
구문
ROW_NUMBER ( )     OVER ( [ <partition_by_clause> ] <order_by_clause> )

주의
ORDER BY 절은 지정된 파티션 내에서 행에 고유 ROW_NUMBER가 할당되는 순서를 결정합니다.

인수
<partition_by_clause>
FROM 절이 생성한 결과 집합을 ROW_NUMBER 함수가 적용되는 파티션으로 나눕니다.

<order_by_clause>
파티션에서 ROW_NUMBER 값이 행에 할당되는 순서를 결정합니다. 자세한 내용은 ORDER BY 절(Transact-SQL)를 참조하십시오.
자세한 내용은 OVER 절(Transact-SQL)를 참조하십시오.


----------------------

SQL Tip 4: rownum와 row_number() 의 차이

 

 

Rownum 과 ROW_NUMBER 의 차이.

rownum의 제약사항.
 
 1.
  select username,rownum from dba_users order by username;?
  USERNAME                                   ROWNUM
  ------------------------------------------    ---------------
  OUTLN                    3
  SYS                      1
  SYSTEM                   2

  rownum은 order by하기 전에의 조회될 row의 순서를 말한다.
 
  이를 풀기 원하는 대로(username으로 sort된 순서로) 받기를 원하면
 
  SELECT username,rownum
  FROM
     (SELECT username
      FROM dba_users  
      ORDER BY username)
 
  이렇게 해야 한다.

2. 또한 rownum은 조건절에 항상 %!^arownum < 4%!^a와 같이 %!^a보다 작다%!^a 혹은 %!^a같거나 작다%!^a 만
   사용할 수 있다. 즉 %!^arownum > 4%!^a는 결과를 return하지 못한다.
  
- row_number 는... 위와 같은 제약사항이 없다.

- 또한 row_number는 rownum과 연관되어 있지 않다.

- row_number는 partition으로 구분된 set의 order by 순서로 값을 생성한다.

ex)
-- 부서별로, 급여의 순서를 알아보자.

select deptno, empno, sal,
       row_number() over (partition by deptno order by sal desc) as sal_rank_dept
from emp;

    DEPTNO      EMPNO        SAL SAL_RANK_DEPT
---------- ---------- ---------- -------------
        10       7839       5000             1
        10       7782       2450             2
        10       7934       1300             3
        20       7788       3000             1
        20       7902       3000             2
        20       7566       2975             3
        20       7876       1100             4
        20       7369        800             5
        30       7698       2850             1
        30       7499       1600             2
        30       7844       1500             3
        30       7521       1250             4
        30       7654       1250             5
        30       7900        950             6

관련글 더보기