首页 > 解决方案 > 动态更新序列值 - plsql

问题描述

我有一个包含三列col_a,col_bcol_c的表。col_a 和col_b具有值,而col_c具有空值。我只想用col_a对应col_b的开始序列更新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

标签: sqloraclesql-update

解决方案


一种方法是使用相关子查询,它为每组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);

推荐阅读