2017-11-30 16 views
1

私は各グループのデータセットの行番号を増やす必要があるPLSQL(Oracle 12)のクエリを作成しています。繰り返しグループを持つグループの行番号を増やす

私の問題はこの質問(Increment Row Number on Group)に似ています。しかし、私は少し異なるシナリオを持っています。私はデータの上に同じシェードを繰り返して、私はグループ化するときに元の順序を維持したい。

私は シェードによってDENSE_RANK関数の順序を使用している場合は、私は元の順序を維持することはできませんよ

Group | Shade | Amount 
---------------------- 
1  | A  | 3 
2  | B  | 3 
3  | A  | 3 

次の結果を取得したい

Level | Shade 
------------- 
1  | A 
2  | A 
3  | A 
4  | B 
5  | B 
6  | B 
7  | A 
8  | A 
9  | A 

以下のデータについては

これは私が得るものです:

Group | Shade | Amount 
---------------------- 
1  | A  | 6 
2  | B  | 3 

グループ化するときに元のグループパターンを維持するにはどうすればよいですか?

答えて

2

あなたはグループを定義する行数の差を使用することができます。

select Shade, count(*) as amount 
from (select t.*, 
      row_number() over (order by level) as seqnum, 
      row_number() over (partition by shade order by level) as seqnum_s 
     from t 
    ) t 
group by Shade, (seqnum - seqnum_s); 

この作品理由を説明するために少し難しいです。サブクエリの結果を見ると、2つのrow_number()の値の違いが連続するグループを識別する理由が明白になります。

関連する問題