2017-02-07 9 views
2

아래 샘플 데이터를 게시하고 있습니다.SQL의 Row_Number에 대한 순위 지정

enter image description here

어떤 I 가지고하면 (ROW_NUMBER 함수를 사용하여 달성) 날짜 및 이름 열 번호에 기초하여 생성 된 행 번호이다. 지금 필요한 것은 Group_Num이라는 다른 파생 된 열로 각 그룹 (이 경우 3 개)의 번호를 만듭니다. 내 이름 열이 반복되지만 날짜 열 값이 변경된다는 사실을 고려하여 달성 할 수 있습니까?

미리 감사드립니다.

+3

사진을 제거하고 DDL + DML로 샘플 데이터를 추가하고,도를 보여주십시오 현재 가지고있는 쿼리. –

+0

http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-question/285557#285557 –

답변

3

확인. Row_number(), lag() 및 SUM()을 사용하여이 작업을 수행 할 수 있습니다.

 select 
     Date, 
     Name, 
     Row_number()over(partition by Group_Num order by ROwiD) Row_Num, 
     Group_Num 
     from 
     (
      SELECT * , 
      SUM(R) OVER(ORDER BY RowID) Group_Num 
      FROM 
      (
       select *, 
       Case When 
       lag(name) OVER (ORDER BY RowID) = name 
       then 0 else 1 end as R 
       from 
        (
         select DATE,NAME, 
         row_number() OVER ( ORDER BY (select 1)) AS 'RowID' 
         from #TableName 
        )A 
      )B 
     )C 
     order by ROwiD 

출력 :

enter image description here

+0

감사합니다. 대답. 그러나 이것을 사용하면 Group_Num이 마지막 3 개의 행에 대해 "1"로 반환됩니다. 3 (이름이 같더라도)이 필요합니다. –

2

사용할 수 DENSE_RANK :

SELECT Date 
    , Name 
    , ROW_NUMBER() OVER(Partition By Name Order By Name, Date) as Row_Num 
    , DENSE_RANK() Over(order by Name) as Group_Num 
FROM #Table 
+0

답변 해 주셔서 감사합니다. 그러나 이것을 사용하면 Group_Num이 마지막 3 개의 행에 대해 "1"로 반환됩니다. 3 (이름이 같더라도)이 필요합니다. –