繁体   English   中英

表中的更新顺序-Oracle

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM