动态更新序列值-plsql

问题描述 投票:1回答:2

我有一个包含三列col_a,col_bcol_c的表。 col_a和col_b具有值,而col_c具有空值。我只想用对应于col_bcol_a开始序列更新col_ccol_c的期望值如下所示。使用光标来实现此方案。

COL_A       COL_B       COL_C

     1          1         1   
     2          1         2  
     3          1         3 
     4          1         4  
     5          1         5  
     6          1         6  
     7          1         7  
     8          1         8  
     9          1         9  
    10          1        10  
   101          2       101
   102          2       102
   104          2       103
   106          2       104
   107          2       105
   108          2       106
   110          2       107
   201          3       201
   202          3       202
   203          3       203
   204          3       204
   205          3       205
   301          5       301
   302          5       302
   305          5       303
   306          5       304
oracle plsqldeveloper
2个回答
0
投票

您可以按如下方式利用分析功能:

Merge into your_table t
Using
(Select col_a, col_b,
       First_value(col_a) over (partition by col_b order by col_a)
       + row_number() over (partition by col_b order by col_a) - 1 as col_c
   From your_table) S
On (t.col_a = s.col_a and t.col_b = s.col_b)
When matched then 
Update set t.col_c = s.col_c

干杯!


0
投票

一种方法是使用相关子查询,该子查询针对每个COL_B组记录,找到最小的COL_A值以启动序列。为此,我们使用COUNT添加适当的偏移量。

UPDATE yourTable t1
SET COL_C = (SELECT MIN(t2.COL_A) +
                    COUNT(CASE WHEN t2.COL_A < t1.COL_A THEN 1 END)
             FROM yourTable t2
             WHERE t2.COL_B = t1.COL_B);
© www.soinside.com 2019 - 2024. All rights reserved.