Sql 如何基于单元格中的值创建重复行

Sql 如何基于单元格中的值创建重复行,sql,oracle,Sql,Oracle,在这种情况下,我希望为表中的每一行生成重复的行。重复数等于每行中的num_rows列 create table test_create_rows(name varchar2(20), num_rows integer); insert into test_create_rows values('Name1',3); insert into test_create_rows values('Name2',4); insert into test_create_rows values('Name3

在这种情况下,我希望为表中的每一行生成重复的行。重复数等于每行中的num_rows列

create table test_create_rows(name varchar2(20), num_rows integer);

insert into test_create_rows values('Name1',3);
insert into test_create_rows values('Name2',4);
insert into test_create_rows values('Name3',1);

commit;
预期产出:

NAME                   NUM_ROWS
-------------------- ----------
Name1                         3
Name1                         3
Name1                         3
Name2                         4
Name2                         4
Name2                         4
Name2                         4
Name3                         1

将交叉应用子句与分层查询一起使用

select x.* 
from test_create_rows t
cross apply (
  select t.NAME, t.NUM_ROWS from dual
  connect by level <= t.num_rows
) x;
您可以尝试使用CTE递归

WITH CTE(name, num_rows,startnum) AS(
  SELECT name,num_rows,1 startnum
  FROM test_create_rows
  UNION ALL
  SELECT name,num_rows,(startnum + 1) as startnum
  FROM CTE
  WHERE (startnum + 1) <= num_rows
)
SELECT name ,num_rows
FROM CTE
order by name
|  NAME | NUM_ROWS |
|-------|----------|
| Name1 |        3 |
| Name1 |        3 |
| Name1 |        3 |
| Name2 |        4 |
| Name2 |        4 |
| Name2 |        4 |
| Name2 |        4 |
| Name3 |        1 |