1

Column 1在这种情况下,我有一个在所有行中重复的相同值。Column 2具有值可能重复的非不同行。我想创建一个名为的列Group,以显示这些行按顺序(按顺序排列)属于该组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

您可以使用“order by col1, col2”来验证结果。

于 2012-09-19T17:31:37.707 回答