如何根据列值创建重复行
How to create duplicate rows based on a column values
我需要根据列值复制结果行。
我已经阅读了一些帖子,如 this,但我无法翻译它,因此它可以在我的 oracle 数据库上运行。
我有两张桌子。第一个存储文本值,第二个定义重复次数。
CREATE TABLE TestTable1 (
id NUMBER(9),
Text VARCHAR2(10)
);
CREATE TABLE TestTable2 (
id NUMBER(9),
Repeat NUMBER(9)
);
insert into TestTable1(
select 101, 'ABC' from dual union all
select 202, 'DEF' from dual union all
select 303, 'GHI' from dual);
insert into TestTable2(
select 101, 2 from dual union all
select 202, 13 from dual union all
select 303, 24 from dual);
所以当我像这样加入表格时
select T1.ID, T1.TEXT, T2.REPEAT
from TestTable1 t1
join TestTable2 t2
on T1.ID = T2.ID;
我得到这个结果
ID TEXT REPEAT
---------------------------
101 ABC 2
202 DEF 13
303 GHI 24
但我需要 2 行文本 'ABC'、13 行文本 'DEF' 和 24 行文本 'GHI'。
我怎样才能使这项工作?
谢谢!
您可以使用 Hierarchical Query
select T1.ID, T1.TEXT
from TestTable1 t1
join TestTable2 t2
on T1.ID = T2.ID
connect by level <= T2.repeat
and prior T1.ID = T1.ID
and prior sys_guid() is not null;
我需要根据列值复制结果行。
我已经阅读了一些帖子,如 this,但我无法翻译它,因此它可以在我的 oracle 数据库上运行。
我有两张桌子。第一个存储文本值,第二个定义重复次数。
CREATE TABLE TestTable1 (
id NUMBER(9),
Text VARCHAR2(10)
);
CREATE TABLE TestTable2 (
id NUMBER(9),
Repeat NUMBER(9)
);
insert into TestTable1(
select 101, 'ABC' from dual union all
select 202, 'DEF' from dual union all
select 303, 'GHI' from dual);
insert into TestTable2(
select 101, 2 from dual union all
select 202, 13 from dual union all
select 303, 24 from dual);
所以当我像这样加入表格时
select T1.ID, T1.TEXT, T2.REPEAT
from TestTable1 t1
join TestTable2 t2
on T1.ID = T2.ID;
我得到这个结果
ID TEXT REPEAT
---------------------------
101 ABC 2
202 DEF 13
303 GHI 24
但我需要 2 行文本 'ABC'、13 行文本 'DEF' 和 24 行文本 'GHI'。
我怎样才能使这项工作?
谢谢!
您可以使用 Hierarchical Query
select T1.ID, T1.TEXT
from TestTable1 t1
join TestTable2 t2
on T1.ID = T2.ID
connect by level <= T2.repeat
and prior T1.ID = T1.ID
and prior sys_guid() is not null;