我不得不做以下几件事,但我不知道如何正确地完成这些事:
我有个桌上考试
| 试验1|测试2|
| - ------|- ------|
| 1个|美国广播公司|
| 第二章|DEF|
我想复制这个,并让test1列有后续的编号,当我做一个简单的插入,我当然可以复制它,我有我需要的,但我不能得到Test1的正确编号。
我想要的结果是这样的:
| 试验1|测试2|
| - ------|- ------|
| 1个|美国广播公司|
| 第二章|DEF|
| 三个|美国广播公司|
| 四个|DEF|
我现在得到的是:
| 试验1|测试2|
| - ------|- ------|
| 1个|美国广播公司|
| 第二章|DEF|
| 1个|美国广播公司|
| 第二章|DEF|
我尝试了以下方法,但没有在test1列中获得后续编号:
INSERT INTO test (test1,
test2)
SELECT test,
test
FROM test; drop table if exists temp.tmp;
create temporary table tmp as
select test1, row_number() over (order by test1) rn
from test; update test
set test1 = (
select rn from temp.tmp
where temp.tmp.test1 = test.test1
);
drop table temp.tmp;
3条答案
按热度按时间ozxc1zmp1#
您可以使用窗口函数来完成此任务。具体来说,您可以复制所有行,但通过将当前记录总数添加到表中的每条记录来增加Test1的值。
输出:
| 试验1|测试2|
| - ------|- ------|
| 1个|美国广播公司|
| 第二章|DEF|
| 三个|美国广播公司|
| 四个|DEF|
检查here演示。
vs91vp4v2#
这个怎么样?
样本数据:
在
test2
列中插入重复项:修复编号:
结果:
o4tp2gmn3#
我认为创建一个包含IDENTITY列的相同表是很简单的,前提是DB的版本是
12c+
,例如Demo