Category

마메의여행기 (252)
사진 (84)
여행 (11)
등산 (30)
정보 (91)
개발 (36)

Search

Blog Menu

[예제로 배우는 MS-SQL] 일련번호 생성 함수 - ROW_NUMBER

[MSSQL] ROW_NUMBER
일련번호를 생성하는 함수입니다.
- PARTITION BY  :  일련번호 생성의 그룹을 지정합니다. (생략가능)
- ORDER BY        :  일련번호를 생성할 순번을 지정합니다.

【예제】
SELECT ROW_NUMBER() OVER(PARTITION BY GroupCode
               ORDER BY AreaCode ASC,  DialCount DESC) AS 'Order'

【데이타】

 GroupCode  AreaCode  DialCount 
 A  1  0
 A  1  1
 A  2  1
 A  3  2
 B  1  0
 B  1  1
 B  2  1
 B  3  1
 B  1  1

【실행】
SELECT ROW_NUMBER() OVER(PARTITION BY GroupCode
               ORDER BY AreaCode ASC,  DialCount DESC) AS 'Order'
, GroupCode
, AreaCode
, DialCount
위와 같이 실행하면 처리는
①   AreaCode ASC,  DialCount DESC 기준으로 정렬한다.
② 일련번호가 각 GroupCode단위로 가산된다. 

【결과】  
 Order  GroupCode  AreaCode  DialCount 
 2  A  1 0
 1  A  1 1
 3  A  2
 4  A  3
 3  B  1
 2  B  1
 4  B  2
 5  B  3
 1  B  1 3
※ ROW_NUMBER의 ORDER BY는 일련번호를 구할때만 사용되므로
    결과자체를 정렬하고 싶을때는 별도로 Order기준으로 ORDER BY해주셔야 합니다.





【이하는 보관용 자료입니다】

SELECT
  ROW_NUMBER() OVER(PARTITION BY A.AreaCode
                    ORDER BY A.AreaCode ASC, B.AOrder DESC, A.DialCount ASC
  ) AS 'DialOrder'
  , A.AreaCode
  , B.AOrder
  , A.DialCount
  , A.ProfileID
  , A.PhoneNo
  , 300000000 + A.NodialCategoryID
  , GETDATE()
FROM
  TB_Tmp_CTI1 as A
  INNER JOIN (
    SELECT
      TB_Tmp_CTI1.BelongCode
      , TB_Tmp_CTI1.AreaCode
      , Count(TB_Tmp_CTI1.ProfileID) AS AOrder
    FROM
      TB_Tmp_CTI1
    WHERE
      TB_Tmp_CTI1.GroupID = 30
    GROUP BY
      TB_Tmp_CTI1.BelongCode
      , TB_Tmp_CTI1.AreaCode
  ) as B
    ON A.BelongCode = B.BelongCode
    AND A.AreaCode = B.AreaCode
WHERE
  A.GroupID = 30
ORDER BY
  DialOrder
  , A.NodialCategoryID ASC


http://d.hatena.ne.jp/pink-woof/20081110/1226287028