DECLARE @TEST TABLE (
NAME VARCHAR(10),
GENDER VARCHAR(5),
GRADE CHAR(1)
)
INSERT INTO @TEST VALUES('PITT', 'MAN', 'A')
INSERT INTO @TEST VALUES('JOLIE', 'WOMAN', 'A')
INSERT INTO @TEST VALUES('KATE', 'WOMAN', 'A')
INSERT INTO @TEST VALUES('BECKAM', 'MAN', 'B')
SELECT * FROM @TEST
NAME |
GENDER |
GRADE |
PITT |
MAN |
A |
JOLIE |
WOMAN |
A |
KATE |
WOMAN |
A |
BECKAM |
MAN |
B |
SELECT *, ROW_NUMBER() OVER (PARTITION BY GENDER ORDER BY GRADE) AS ROWNUM
NAME |
GENDER |
GRADE |
ROWNUM |
PITT |
MAN |
A |
1 |
BECKAM |
MAN |
B |
2 |
JOLIE |
WOMAN |
A |
1 |
KATE |
WOMAN |
A |
2 |
ROW_NUMBER 라는 것은 SQL SERVER 에서 제공해주는 내장함수(순위함수라고 합니다.) 같은 녀석입니다.
이후 OVER 절을 이용하여 어떻게 순위를 정의할지 결정하게 됩니다.
OVER 절 내에는 ORDER BY 절이 따라와야 하며 여기에 정의되는 ORDER BY 절에 따라서 값이 정해집니다.
위에 보시면 ROWNUM 이라는 컬럼이 추가된걸 알 수 있는데 이는 SELECT 문을 참고하여 이해하실 수 있을 것입니다.
위 SELECT 문에는 PARTITION BY 절을 이용해서 그룹처럼 ROW들의 정렬을 GENDER 값에 따라 묶어주었고,
여기서 ORDER BY 절로 GRADE 값에 따라서 정렬해준 것을 알 수 있습니다.
참고하시어 즐거운 플그래밍 되셔요. :)
'Database > MSSQL' 카테고리의 다른 글
[링크] MSSQL : CURSOR 기초 (0) | 2012.04.03 |
---|---|
MSSQL : select절의 열이름이 너무 길어져서 alias를 줄 경우 where절에도 또 쓰고 싶다면? (5) | 2012.03.05 |