在这种情况下,我想为表中的每一行生成重复的行。重复的数量等于每行中的 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)
你可以尝试使用 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)