我需要根据oracle中的另一个列值empid对1,2进行排序。每列值我需要在序列输出列中有两个值
前虚拟数据
empid | 深度 |
---|---|
1 | 1 |
需要o/p
empid | 深度 | 顺序 |
---|---|---|
1 | 1 | 1 |
1 | 1 | 2 |
我们尝试使用 rownumber() 分区,但它仅根据另一列 deptid 排序一次,但我们需要对单个 empid 排序并递增两次 1,2
这是某种行生成器。这是一种选择:
样本数据:
SQL> with dummy (empid, deptid) as
2 (select 1, 1 from dual union all
3 select 3, 4 from dual
4 )
查询:
5 select empid, deptid, column_value as sequence
6 from dummy cross join
7 table(cast(multiset(select level from dual
8 connect by level <= 2
9 ) as sys.odcinumberlist))
10 order by empid, sequence;
EMPID DEPTID SEQUENCE
---------- ---------- ----------
1 1 1
1 1 2
3 4 1
3 4 2
另一种选择是使用子查询,它联合两个序列行:
SQL> with dummy (empid, deptid) as
2 (select 1, 1 from dual union all
3 select 3, 4 from dual
4 )
5 select empid, deptid, sequence
6 from dummy cross join (select 1 sequence from dual union all
7 select 2 from dual
8 );
EMPID DEPTID SEQUENCE
---------- ---------- ----------
1 1 1
1 1 2
3 4 1
3 4 2
这也有效,但如果涉及更多序列值(不仅仅是两个),则不切实际,而第一个选项(行生成器)只需要您修改第 8 行中的值(您可以使用其他数字而不是2).