【发布时间】:2021-11-30 06:31:16
【问题描述】:
我需要将两组不同的查询合并到两个不同的列中。
持续时间
select
sum(duration),
pps.person_id
from
anc_per_abs_entries apae,
anc_absence_types_vl abs,
per_periods_of_service pps,
anc_absence_type_reasons_f abtype,
anc_absence_reasons_f_tl ab_reason
where 1=1
AND (To_Char(apae.start_date ,'YYYY-MM-DD') Between to_date(To_Char(:From_Date,'YYYY-MM-DD'),'YYYY-MM-DD') And to_date(To_Char(:To_Date,'YYYY-MM-DD'),'YYYY-MM-DD') )
AND apae.APPROVAL_STATUS_CD = 'APPROVED'
AND apae.ABSENCE_STATUS_CD = 'SUBMITTED'
and abs.name like 'Paid Personal Leave'
AND apae.period_of_service_id = pps.period_of_service_id
AND apae.absence_type_id = abs.absence_type_id
AND abtype.absence_type_id = abs.absence_type_id
AND ab_reason.absence_reason_id = abtype.absence_reason_id
AND apae.absence_type_reason_id = abtype.absence_type_reason_id
AND pps.person_id = papf.person_id
group by pps.person_id
测量
select sum(measure)
from
time_track rec ,
time_type rec_type,
per_all_people_f papf
where 1=1
AND rec_type.tm_bldg_blk_version = rec.tm_rec_version
AND rec.tm_rec_type IN ( 'RANGE', 'MEASURE' )
AND (to_date(To_Char(rec.START_TIME,'YYYY-MM-DD'),'YYYY-MM-DD') Between to_date(To_Char(:From_Date,'YYYY-MM-DD'),'YYYY-MM-DD') And to_date(To_Char(:To_Date,'YYYY-MM-DD'),'YYYY-MM-DD') )
and papf.person_id = rec.person_id
from_date 和 to_date 是参数,这两个查询应该形成我的结果集的两个不同列。我的预期结果是 -
person_number duration measure
73636 10 8
即持续时间来自查询 1,测量来自查询 2。如果我在一个查询中用作 2 个子查询,这两个查询需要计算并且会受到影响或被操纵。 例如,因为带薪事假的持续时间为 2020 年 1 月 1 日,但它没有“度量”,但仍会出现在结果输出中。
如何将这两者结合起来,在两个不同的列中形成结果输出
QUERY 1 QUERY 2 person_id
常用链接是 person_id。在子查询中使用时,由于日期范围内可能有多个值,因此会在子查询中给出多于 1 行的错误。
【问题讨论】:
-
简短的回答是“使用 JOIN”。该连接的外观应该取决于三件事。 1. 哪个表有“duration”列? 2. 哪个表有“度量”列? 3.两个表都有person_id吗? SQL 显然是由某个程序生成的。该程序用于连接吗?或者这是手工完成的事情?了解所涉及的表的实际外观会很有帮助。
-
第二个查询的输出中没有
person_id。如果你愿意,那就加入他们person_id。请显示您当前的代码并描述它的问题所在。