1

この場合、Column 1すべての行で同じ値が繰り返されます。Column 2値が繰り返される可能性のある明確でない行があります。行がこのグループに連続して属することを示すために名前が付けられた列を作成しますGroup(Ordered by Column 2)。基本的に、次のような出力を作成する必要があります。

Column 1   | Column 2   | Group
--------------------------------
100        | AA         | 1
100        | AA         | 1
100        | AA         | 1 
100        | BB         | 2
100        | BB         | 2
100        | CC         | 3
100        | DD         | 4
100        | DD         | 4
4

3 に答える 3

2

必要な関数は次のとおりではありdense_rankませんrank

select column1, column2,
       dense_rank() over (order by column2)
from t

DENSE_RANK()は、ギャップなしで1からグループの数までの数値を生成します。また、あなたがしていることのために、これはパーティションを持つべきではありません。

于 2012-09-19T17:40:05.760 に答える
1

このコードを試してください:

with list as
(select distinct col2 from tab order by 1),
      listnum as
(select rownum, col2 from list)

select * 
from listnum l
join tab t on t.col2=l.col2;

SQLフィドルデモ

私が使用したコードに関するリンク:

于 2012-09-19T17:38:14.497 に答える
0

oracleでdense_rank関数を使用できます。

select col1,
       col2,
       dense_rank () over (partition by col1
                         order by col2) group_column
  from test_table;

      COL1 CO GROUP_COLUMN
---------- -- ------------
       100 AA            1
       100 AA            1
       100 AA            1
       100 BB            2
       100 BB            2
       100 CC            3
       100 DD            4
       100 DD            4

「col1、col2による順序」を使用して結果を確認できます。

于 2012-09-19T17:31:37.707 に答える