创建一个列以分组行和按顺序计数

时间:2012-09-19 17:26:48

标签: sql oracle count

我有一个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

3 个答案:

答案 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;

SQL Fiddle DEMO

关于我使用的代码的链接:

答案 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排序”来验证结果。