sql server 2000 sql server 2005 에 대응 하 는 rownumber()、rank()、DENSE_RANK (), ntile () 등 용법

8038 단어 SQL Server 2000
CSDN 에서 전환: http://blog.csdn.net/htl258/article/details/4006717
SQL server 2005 에 추 가 된 몇 가지 함수, 각각 rownumber( )、rank (),, DENSE RANK (), ntile () 다음은 실례 를 들 어 간단하게 설명 합 니 다. 1. row number ()         먼저 데 이 터 를 좀 하고, 먼저 표를 작성 하 다.
SET NOCOUNT ON
CREATE TABLE Person(
FirstName VARCHAR(10),
Age INT,
Gender CHAR(1))
INSERT INTO Person VALUES ('Ted',23,'M')
INSERT INTO Person VALUES ('John',40,'M')
INSERT INTO Person VALUES ('George',6,'M')
INSERT INTO Person VALUES ('Mary',11,'F')
INSERT INTO Person VALUES ('Sam',17,'M')
INSERT INTO Person VALUES ('Doris',6,'F')
INSERT INTO Person VALUES ('Frank',38,'M')
INSERT INTO Person VALUES ('Larry',5,'M')
INSERT INTO Person VALUES ('Sue',29,'F')
INSERT INTO Person VALUES ('Sherry',11,'F')
INSERT INTO Person VALUES ('Marty',23,'F')
직접 예 를 들 어 문 제 를 설명 한다.
SELECT ROW_NUMBER() OVER (ORDER BY Age) AS [Row Number by Age],
FirstName,
Age
FROM Person
나타 난 데 이 터 는 다음 과 같다.
Row Number by Age                FirstName            Age
--------------------------                 ----------            --------
1                                                Larry                   5
2                                                Doris                   6
3                                                George               6
4                                                Mary                   11
5                                                Sherry                 11
6                                                Sam                    17
7                                                Ted                     23
8                                                Marty                   23
9                                                Sue                     29
10                                              Frank                  38
11                                              John                    40
     ,          ,  row_number()        ,          Row Number by Age,
 sql server2000  :
sql server2000 , IDENTITY() , IDENTITY() sql server2000 , 。
select identity(int,1,1) as [Row Number by Age],FirstName,Age into #A from Person order by Age
select * from #A
drop table #a
         ,     
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS [Row Number by Record Set], FirstName, Age FROM Person
      
SELECT ROW_NUMBER() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender], FirstName, Age, Gender FROM Person

여 기 는 성별 에 따라 구간 을 나 누고, 같은 성별 은 나이 에 따라 정렬 하 며, 수출 결 과 는 다음 과 같다.
Partition by Gender         FirstName         Age                Gender

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

1                           Doris             6                  F

2                           Mary              11                 F

3                           Sherry            11                 F

4                           Sue               29                 F

1                           Larry             5                  M

2                           George            6                  M

3                           Sam               17                 M

4                           Ted               23                 M

5                           Marty             23                 M

6                           Frank             38                 M

7                           John              40                 M
주의 하 세 요. 이름 M 부터 번호 가 1, 2, 3 부터 시작 되 었 습 니 다.
 
2.RANK( )  
       
SELECT RANK() OVER (ORDER BY Age) AS [Rank by Age], FirstName, Age FROM Person
    :
Rank by Age                FirstName        Age -------------------- ---------- ----------- 1                          Larry            5 2                          Doris            6 2                          George           6 4                          Mary             11 4                          Sherry           11 6                          Sam              17 7                          Ted              23 7                          Marty            23 9                          Sue              29 10                         Frank            38 11                         John             40
    ,     ,       ,   1,2,2,4 。
 sql server2000  :
RANK() , sql server2000 。
select [Rank by Age]=isnull((select count(*) from person where Age>A.Age),0)+1,FirstName,Age from Person A order by [Rank by Age]
 
SELECT RANK() OVER(PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName, Age, Gender FROM Person
Partition by Gender         FirstName         Age                Gender

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

1                           Doris             6                  F

2                           Mary              11                 F

2                           Sherry            11                 F

4                           Sue               29                 F

1                           Larry             5                  M

2                           George            6                  M

3                           Sam               17                 M

4                           Ted               23                 M

4                           Marty             23                 M

6                           Frank             38                 M

7                           John              40                 M

성별 별로 그룹 을 나 눈 것 을 볼 수 있 습 니 다. 성별 별로 그룹 을 나 누 면 rank () 함수 3. DENSE RANK () 함수 가 계속 사 용 됩 니 다.         SELECT DENSE_RANK() OVER (ORDER BY Age) AS [Dense Rank by Age],          FirstName,          Age         FROM Person 출력 결과: Dense Rank by Age          FirstName        Age-------------------- ---------- -----------1                          Larry            52                          Doris            62                          George           63                          Mary             113                          Sherry           114                          Sam              175                          Ted              235                          Marty            236                          Sue              297                          Frank            388                          John             40. 보이 시 나 요? rank 함수 와 차이 점 은 순 서 는 항상 연속 입 니 다. Doris 와 George 는 같은 해 에 모두 2 위 를 차 지 했 지만 그 후의 mary 는 rank 함수 처럼 4 위 가 아니 라 3 위 를 차 지 했 습 니 다. 4. ntile () 함수 SELECT FirstName, Age, NTILE (3) OVER (ORDER BY Age) AS [Age Groups]FROM Person
출력 결과: First Name        Age               Age Groups---------- ----------- --------------------Larry                5                  1Doris                6                  1George            6                  1Mary                11                1Sherry             11                 2Sam                17                 2Ted                 23                 2Marty              23                 2Sue                29                 3Frank             38                 3John               40                 3. 이 함 수 는 ntile (n) 의 N 에 따라 기록 을 몇 단락 으로 나 누 었 습 니까? 11 개의 기록 은 현재 3 단 으로 나 뉘 었 습 니 다. lary 에서 mary 까지 는 1 단 이 고 Sherry 에서 maty 까지 는 2 단 이 며 sue 에서 john 까지 는 3 단 입 니 다.

좋은 웹페이지 즐겨찾기