如何使SQL查询返回确切的行数

时间:2013-12-04 06:49:27

标签: sql oracle

假设有一个表,员工A有3行,员工B有2行。我需要编写一个查询,该员工将为员工返回3行(即员工B应该有一个虚拟行)< / p>

1 个答案:

答案 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>

可能有更简单的替代方案;请详细说明你的问题。