我有一个表,其中有重复的行,但group_id
字段为空:
| 身份证|参考文献1|组标识|
| - ------|- ------|- ------|
| 1个|AAAA级||
| 第二章|AAAA级||
| 三个|AAAA级||
| 四个|BBBB公司||
| 五个|BBBB公司||
| 六个|中交||
| 七|中交||
| 八个|中交||
| 九|中交||
| 十个|中交||
只要group_id字段为空,我就需要在其中添加一个数字,并用途:
UPDATE journals_cv027_tab f1
SET f1.group_id = journals_seq.nextval
WHERE f1.group_id IS NULL
AND EXISTS (SELECT reference1
FROM journals_cv027_tab c
WHERE c.reference1 = f1.reference1);
COMMIT;
这只是为每条记录添加了一个编号,如下所示:
| 身份证|参考文献1|组标识|
| - ------|- ------|- ------|
| 1个|AAAA级|1个|
| 第二章|AAAA级|第二章|
| 三个|AAAA级|三个|
| 四个|BBBB公司|四个|
| 五个|BBBB公司|五个|
| 六个|中交|六个|
| 七|中交|七|
| 八个|中交|八个|
| 九|中交|九|
| 十个|中交|十个|
但我需要为每组重复记录分配一个编号,例如:
| 身份证|参考文献1|组标识|
| - ------|- ------|- ------|
| 1个|AAAA级|1个|
| 第二章|AAAA级|1个|
| 三个|AAAA级|1个|
| 四个|BBBB公司|第二章|
| 五个|BBBB公司|第二章|
| 六个|中交|三个|
| 七|中交|三个|
| 八个|中交|三个|
| 九|中交|三个|
| 十个|中交|三个|
2条答案
按热度按时间goucqfw61#
我认为不需要根据您的情况设置顺序,您可以在
MERGE
语句中使用DENSE_RANK()
解析函数,并带有MATCHED
选项,假定id
是主键,可以很容易地在子查询的匹配条件中使用,例如Demo
如果希望保留序号的值,则可以选择在截断表之前将group_id的最大值存储在具有一行和一列的表中,以便在下一次更新中作为
<that value> + DENSE_RANK()...
使用xyhw6mcr2#
可以使用临时表存储组的值: