根据 table[Oracle SQL 查询中保存的记录生成动态记录]。请参考图片 link 了解要求

generate dynamic record based on the record saved in the table[Oracle SQL query]. Please refer the image link to know about the requirements

实际记录:

预期记录:

创建 table 和插入语句在这里:-

create table t11
    (
    id number,
    name varchar2(20),
    standard varchar2(20),
    sdt date
    );

insert into t11 values(1,'Ramakrushna',to_char(1,'RN'), sysdate);

insert into t11 values(1,'Ramakrushna',to_char(2,'RN'), sysdate);   

insert into t11 values(2,'Ramakrushna',to_char(1,'RN'),sysdate);

insert into t11 values(2,'Ramakrushna',to_char(5,'RN'),sysdate);

insert into t11 values(3,'Ramakrushna',to_char(1,'RN'),sysdate);

动态记录是根据id生成的,应该会连同id一起生成8条记录。 保存在 table 中的记录就像, 对于 id 1 记录可以 i 和 iii 标准(罗马值), 但 id 1 的预期记录将是 i、ii、iii、iv、v、vi、vii、viii,其他 id 也一样,基于 table.

中的记录保存

这是我的方法,使用 with as 子句。它几乎不需要修改。

 with t01 as (
    select rownum rn,id,name,standard,sdt from t11
    ),
    t02 as (
    select rownum rn ,id,name,to_char(to_char(l,'RN')) as standard,sdt,l
       from t01
          left outer join (select level l from dual connect by level <= ((select max(rn) from t01) + 6)) lev on 1 = 1 -- passed 2 as argument
    ),
    t03 as (
    select  t02.id,t02.name,t02.standard,t02.sdt,
    row_number() over(partition by standard order by 1) rnk
    from t02 where not exists (select 'Y' from t01 where t01.standard = t02.standard)
    )
    select id,name,standard,sdt from t03 where rnk = 1
    union
    select id,name,standard,sdt from t1;

如果 namesdt 对于每个 id 都是常数,如示例数据所示,那么一个简单的方法是 select 不同的元组和使用递归查询生成所有数字:

with cte (id, name, standard, sdt) as (
    select distinct id, name, 1, sdt from t11
    union all
    select id, name, standard + 1, sdt from cte where standard < 8
)
select id, name, to_char(standard, 'RN') standard, sdt 
from cte
order by id, standard

我喜欢使用常见的 table 表达式而不是 connect by,因为它们是标准的 SQL 并且在 Oraclce 中支持了相当长的时间,但逻辑只是与 connect by:

相同
select distinct id, name, to_char(level, 'RN') standard, sdt 
from t11
connect by level <= 8
order by id, standard

Demo on DB Fiddle:

ID | NAME        | STANDARD        | SDT      
-: | :---------- | :-------------- | :--------
 1 | Ramakrushna |               I | 10-JUN-20
 1 | Ramakrushna |               V | 10-JUN-20
 1 | Ramakrushna |              II | 10-JUN-20
 1 | Ramakrushna |              IV | 10-JUN-20
 1 | Ramakrushna |              VI | 10-JUN-20
 1 | Ramakrushna |             III | 10-JUN-20
 1 | Ramakrushna |             VII | 10-JUN-20
 1 | Ramakrushna |            VIII | 10-JUN-20
 2 | Ramakrushna |               I | 10-JUN-20
 2 | Ramakrushna |               V | 10-JUN-20
 2 | Ramakrushna |              II | 10-JUN-20
 2 | Ramakrushna |              IV | 10-JUN-20
 2 | Ramakrushna |              VI | 10-JUN-20
 2 | Ramakrushna |             III | 10-JUN-20
 2 | Ramakrushna |             VII | 10-JUN-20
 2 | Ramakrushna |            VIII | 10-JUN-20
 3 | Ramakrushna |               I | 10-JUN-20
 3 | Ramakrushna |               V | 10-JUN-20
 3 | Ramakrushna |              II | 10-JUN-20
 3 | Ramakrushna |              IV | 10-JUN-20
 3 | Ramakrushna |              VI | 10-JUN-20
 3 | Ramakrushna |             III | 10-JUN-20
 3 | Ramakrushna |             VII | 10-JUN-20
 3 | Ramakrushna |            VIII | 10-JUN-20