假设有一个表,员工A有3行,员工B有2行。我需要编写一个查询,该员工将为员工返回3行(即员工B应该有一个虚拟行)< / p>
答案 0 :(得分:2)
我的问题并不完全清楚(例如,“3行”也可以是“8行”),但有一些起点:
create table emprec
( emp_id number
, val number
)
insert into emprec values ( 1, 15)
insert into emprec values ( 1, 16)
insert into emprec values ( 1, 17)
insert into emprec values ( 2, 18)
insert into emprec values ( 2, 19)
select driving_x_axis.counter
, driving_y_axis.emp_id
, emprec.val
from ( select level counter
from dual
connect by level <= 3
) driving_x_axis
join ( select distinct emp_id
from emprec
) driving_y_axis
on 1=1 /* Carthesian. */
left
outer
join ( select emp_id
, val
, row_number() over (partition by emp_id order by val) rownumber
from emprec
) emprec
on emprec.rownumber = driving_x_axis.counter
and emprec.emp_id = driving_y_axis.emp_id
1 1 15
2 1 16
3 1 17
1 2 18
2 2 19
3 2 <null>
可能有更简单的替代方案;请详细说明你的问题。