일련번호를 생성하는 함수입니다.
- PARTITION BY : 일련번호 생성의 그룹을 지정합니다. (생략가능)
- ORDER BY : 일련번호를 생성할 순번을 지정합니다.
【예제】
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 |
【실행】
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 | 1 |
4 | A | 3 | 2 |
3 | B | 1 | 0 |
2 | B | 1 | 1 |
4 | B | 2 | 1 |
5 | B | 3 | 1 |
1 | B | 1 | 3 |
결과자체를 정렬하고 싶을때는 별도로 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
'개발 > DB' 카테고리의 다른 글
PostgreSQL | 테이블/컬럼 정보조회 SQL (0) | 2016.02.03 |
---|---|
[예제로 배우는 오라클SQL] 해당 테이블의 필드목록 조회하기 (0) | 2013.05.03 |
[예제로 배우는 오라클SQL] 세션에서 ROW LOCK 조회 및 LOCK 해제 (0) | 2013.04.24 |
[예제로 배우는 MS-SQL] 데이타베이스 로그 삭제(초기화) (0) | 2010.07.20 |
[예제로 배우는 MS-SQL] 전각스페이스를 이용해서 이름 비교하는 SQL (0) | 2010.07.15 |
[예제로 배우는 MS-SQL] 숫자를 엔표시로 변환 - REPLACE, CONVERT, CAST (0) | 2009.11.20 |
[예제로 배우는 MS-SQL] 전각문자 공백제거 - REPLACE, LTRIM, RTRIM (0) | 2009.11.20 |
[예제로 배우는 MS-SQL] 저장프로시져 예 (0) | 2009.11.20 |