我有一个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
答案 0 :(得分:2)
您想要的功能是dense_rank
而不是rank
:
select column1, column2,
dense_rank() over (order by column2)
from t
DENSE_RANK()产生从1到组数的数字,没有间隙。此外,对于你正在做的事情,这不应该有一个分区。
答案 1 :(得分: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;
关于我使用的代码的链接:
答案 2 :(得分: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排序”来验证结果。