我有一个包含三列col_a,col_b和col_c的表。 col_a和col_b具有值,而col_c具有空值。我只想用对应于col_b的col_a开始序列更新col_c。 col_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
您可以按如下方式利用分析功能:
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
干杯!
一种方法是使用相关子查询,该子查询针对每个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);