sql - 动态更新序列值 - plsql
问题描述
我有一个包含三列col_a,col_b和col_c的表。col_a 和col_b具有值,而col_c具有空值。我只想用col_a对应col_b的开始序列更新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
解决方案
一种方法是使用相关子查询,它为每组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);
推荐阅读
- c# - 用 C# 读出谁在 Zoom 中说话
- linux - Azure 函数 .elf 文件 - 权限被拒绝
- c# - 将两个日期时间变量合二为一
- oracle - 如何在 Oracle JDBC 中使用参数?
- python - 如何在线程之间共享变量?
- php - WooCommerce 5.6.0 Checkout Coupon Form Issue using functions.php
- flutter - 如何获取 Instagram 个人资料 api?
- excel - MAXIFS 函数递增以返回第二、第三大数字
- python - conda:找不到 conda 环境(linux、bash 脚本)
- python - 日期时间转换 - 仅转换不包含时间的行的日期