如何基于列值创建重复的行

时间:2019-05-02 11:56:15

标签: sql oracle oracle11g recursive-query

我需要根据列值复制结果行。 我已经阅读了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”。
我该怎么做?
谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用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;

Demo