按 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
我在 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