Sql 如何基于单元格中的值创建重复行
在这种情况下,我希望为表中的每一行生成重复的行。重复数等于每行中的num_rows列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
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 |