如何根据单元格中的值创建重复行

May*_*ive 3 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',1);

commit;
Run Code Online (Sandbox Code Playgroud)

预期输出:

NAME                   NUM_ROWS
-------------------- ----------
Name1                         3
Name1                         3
Name1                         3
Name2                         4
Name2                         4
Name2                         4
Name2                         4
Name3                         1
Run Code Online (Sandbox Code Playgroud)

D-S*_*hih 5

你可以尝试使用 CTE Recursion

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
Run Code Online (Sandbox Code Playgroud)

结果

|  NAME | NUM_ROWS |
|-------|----------|
| Name1 |        3 |
| Name1 |        3 |
| Name1 |        3 |
| Name2 |        4 |
| Name2 |        4 |
| Name2 |        4 |
| Name2 |        4 |
| Name3 |        1 |
Run Code Online (Sandbox Code Playgroud)