当我单独运行这个子查询时:
上述查询也能得到“好”的结果。
select *
from (select rpt_nbr, iteration, seq_nbr, emp_id_key, rank() over
(partition by emp_id_key order by iteration, seq_nbr) rk
from SJTCAPP.LAB_RPT_SPEC_EMP where rpt_nbr = 1572413)
where rk = rownum
我得到了一个很好的结果,每次迭代只返回一个emp_id_key
和seq_nbr
,即使有多个emp_id_key
被指定。这很好,然而,当我将它添加到我的查询中:
select * from
SJTCAPP.LAB_RPT r
left join SJTCAPP.LAB_RPT_SPEC s on s.rpt_nbr = r.rpt_nbr
left join (select * from
(select rpt_nbr, iteration, seq_nbr, emp_id_key, rank() over (partition by emp_id_key order
by iteration, seq_nbr) rk from SJTCAPP.LAB_RPT_SPEC_EMP ) where rk = rownum)
se on se.rpt_nbr = s.rpt_nbr and se.seq_nbr = s.seq_nbr and se.iteration = s.iteration
left join sjtcapp.employee tech on tech.emp_id_key = se.emp_id_key
我在tech.emp_id_key连接中得到了一个空值
更新:
select * from (select rpt_nbr, iteration, seq_nbr, emp_id_key, rank() over (partition by emp_id_key order by iteration, seq_nbr ) rk from SJTCAPP.LAB_RPT_SPEC_EMP where rpt_nbr = 1572413) where rk = rownum and rpt_nbr = 1572413
上述查询也能得到“好”的结果。
RPT_NBR ITERATION SEQ_NBR EMP_ID_KEY RK
1572413 1 1 44746 1
1572413 1 2 44746 2
我之前使用了一个简单的连接来获取每个技术人员的正确查询结果。唯一的问题是,如果有多个技术人员被分配了同一个任务,会导致查询结果出现重复。因此,我添加了 RANK
子查询。
where rpt_nbr =1572413
,会再次得到1个emp_ID_key吗?也许当您删除限制性条件时,您就可以看到一对多的情况。或者,如果您从顶部查询示例中删除where rpt_nbr = 1572413
,它是否按照您所需的方式工作?我怀疑 SJTCAPP.LAB_RPT 或 SJTCAPP.LAB_RPT_SPEC 在连接到内部选择之前会导致出现空值,这会导致 tech.emp_ID_Key 和 se.emp_id_key 之间出现空值。需要查看样本数据才能知道(SQLFiddle.Com在此方面会有所帮助)。 - xQbert