按 sql 中的顺序获取输出

Getting the output in a sequence order in sql

我在 Table 中有一个列 col1,col2 一个 col3 可以在 Table 中,也可以是一个虚拟列,这是我拥有的数据。

COL1    COL2
0         1
3         1
5         1
7         1
8         1
10        1
0         2
21        2
23        2
25        2
26        2
28        2
0         3
39        3
0         4

当第 2 列中的值发生变化时,我如何通过在列中像这样动态生成(1,2,3..)来获得我预期的操纵数据,COL1 中将是 0,那么序列应该全部从 (1,2..) 开始:-

   COL1    COL2    COL3
    0        1       0
    3        1       1
    5        1       2
    7        1       3
    8        1       4
    10       1       5
    0        2       0
    21       2       1
    23       2       2
    25       2       3
    26       2       4
    28       2       5
    0        3       0
    39       3       1
    0        4       0

-- DDL :-

Create table TEST_A
(
COL1 number,
COL2 number
);

-- DML:-
Insert into TEST_A (COL1,COL2) values (0,1  );
Insert into TEST_A (COL1,COL2) values (3,1  );
Insert into TEST_A (COL1,COL2) values (5,1  );
Insert into TEST_A (COL1,COL2) values (7,1  );
Insert into TEST_A (COL1,COL2) values (8,1  );
Insert into TEST_A (COL1,COL2) values (10,1 );
Insert into TEST_A (COL1,COL2) values (0,2  );
Insert into TEST_A (COL1,COL2) values (17,2 );
Insert into TEST_A (COL1,COL2) values (0,3  )   ;
Insert into TEST_A (COL1,COL2) values (21,3 );
Insert into TEST_A (COL1,COL2) values (23,3 );
Insert into TEST_A (COL1,COL2) values (25,3 );
Insert into TEST_A (COL1,COL2) values (26,3 );
Insert into TEST_A (COL1,COL2) values (28,3 );
Insert into TEST_A (COL1,COL2) values (0,4  )   ;
Insert into TEST_A (COL1,COL2) values (39,4 );
Insert into TEST_A (COL1,COL2) values (0,5  )   ;
commit;

这里可以使用Oracle ROW_NUMBER()解析函数。但是因为你想从零开始你的行号,减去一,因为 ROW_NUMBER() 默认是基于一的。

select
    COL1,
    COL2,
    row_number() over (partition by col2 order by col2) - 1 as col3
from TEST_A