[英]Update sequence in table - Oracle
我有一张桌子:
表格1
u_a_id element_id my_seq line_num
1 HI01-01 1 30
1 HI01-02 1 30
1 HI01-01 1 31
1 HI01-02 1 31
1 HI02-03 1 31
1 HI02-04 1 31
2 HI01-01 1 40
2 HI01-02 1 40
2 HI02-01 1 40
2 HI02-02 1 40
2 HI02-03 1 40
2 HI02-04 1 40
2 HI03-02 1 41
2 HI03-03 1 41
2 HI05-04 1 41
2 HI05-05 1 41
如果新的HI01出现在同一u_a_id或HI更改计数器中,例如,我需要更新my_seq。 HI01-> HI02,每个u_a_id订单按line_num排序。
我有这个查询,但是即使u01_id = 1中的HI01-01的第二个实例,它也将seq设为1。
select t.*,
dense_rank() over (partition by u_a_id order by substr(element_id, 1, 4)) as new_my_seq
from table1 t
输出如下所示:
u_a_id element_id my_seq line_num
1 HI01-01 1 30
1 HI01-02 1 30
1 HI01-01 2 31
1 HI01-02 2 31
1 HI02-03 3 31
1 HI02-04 3 31
2 HI01-01 1 40
2 HI01-02 1 40
2 HI02-01 2 40
2 HI02-02 2 40
2 HI02-03 2 40
2 HI02-04 2 40
2 HI03-02 3 41
2 HI03-03 3 41
2 HI05-04 4 41
2 HI05-05 4 41
Oracle SQL中有没有办法实现这一目标?
我想您只想要:
select t.*,
dense_rank() over (partition by u_a_id
order by line_num,
substr(element_id, 1, 4)
) as my_seq
from t;
您可能要按line_num而不是substr(element_id,1,4)排序,然后将substr(element_id,1,4)放在by中。
select t.*,
dense_rank() over (partition by u_a_id, substr(element_id, 1, 4) order by line_num) as new_my_seq
from table1 t
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.