首页 > 解决方案 > 表中的更新序列 - 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 -> 每个 u_a_id 订单的 HI02,按 line_num。

我有这个查询,但是即使对于 u_a_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 中有没有办法实现这一点?

标签: sqloracle

解决方案


我想你只是想要:

select t.*,
       dense_rank() over (partition by u_a_id
                          order by line_num,
                                   substr(element_id, 1, 4)
                         ) as my_seq
from t;

推荐阅读