2017-02-07 7 views
2

以下のサンプルデータを投稿しています。SQLのRow_Numberでの順位付け

enter image description here

私は何を持っていること(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つの名前が必要です(名前は同じですが)。 –

関連する問題