【问题标题】:Join result of two queries with same column in oracle在 oracle 中连接具有相同列的两个查询的结果
【发布时间】:2019-08-08 12:52:47
【问题描述】:

我正在使用 Oracle。我目前正在处理具有两个不同查询输出的表。我想将两个输出合并到一个输出中,我尝试过 Union all 和 union 但没有运气。

with D as 
(
Select 
VP.HOMELABORLEVELNM4 as DEPT,
SUM(X.DURATIONSECSQTY/3600.0) as ACTL_HR,
SUM(X.WAGEAMT) as ACTL_DLR,
to_char(X.APPLYDTM,'YYYY-MM') AS MONTHLY,
VP.HOMELABORLEVELDSC4 as DESCRIPTION,
NULL as DAILY,
NULL as DEPT1,
NULL as ACTL_HR1,
NULL as ACTL_DLR1
from VP_EMPLOYEEV42 VP,
WFCTOTAL X
where 
VP.PERSONID = X.EMPLOYEEID and
X.APPLYDTM between '01-DEC-18' and '31-DEC-18' and
X.EMPLOYEEID in (select personid from PERSONCSTMDATA where CUSTOMDATADEFID ='154' and PERSONCSTMDATATXT = 'USKEANE')
group by VP.HOMELABORLEVELNM4, VP.HOMELABORLEVELDSC4, to_char(X.APPLYDTM,'YYYY-MM')
union all
Select 
NULL as DEPT,
NULL as ACTL_HR,
NULL as ACTL_DLR,
NULL as MONTHLY,
VP.HOMELABORLEVELDSC4 as DESCRIPTION,
to_char(X.APPLYDTM) as DAILY,
VP.HOMELABORLEVELNM4 as DEPT1,
SUM(X.DURATIONSECSQTY/3600.0) as ACTL_HR1,
SUM(X.WAGEAMT) as ACTL_DLR1
from VP_EMPLOYEEV42 VP,
WFCTOTAL X
where 
VP.PERSONID = X.EMPLOYEEID and
X.APPLYDTM = '31-DEC-18' and
X.EMPLOYEEID in (select personid from PERSONCSTMDATA where CUSTOMDATADEFID ='154' and PERSONCSTMDATATXT = 'USKEANE')
group by VP.HOMELABORLEVELNM4, VP.HOMELABORLEVELDSC4, to_char(X.APPLYDTM)
)
select D.DEPT DEPT,  
SUM(D.ACTL_HR) ACTL_HR, 
SUM(D.ACTL_DLR) ACTL_DLR,
D.MONTHLY MONTHLY, 
D.DESCRIPTION DESCRIPTION, 
D.DAILY DAILY, 
D.DEPT1 DEPT1, 
SUM(D.ACTL_HR1) ACTL_HR1, 
SUM(D.ACTL_DLR1) ACTL_DLR1
from D
group by D.DEPT, D.MONTHLY, D.DAILY, D.DESCRIPTION, D.DEPT1
order by DESCRIPTION

它给了我这样的输出

-部门-HR-DLR-每月-DESC-每日-部门-HR-DLR-

-1-12-12-11/1-Manu-NULL-NULL-NULL-NULL-

-NULL-NULL-NULL-NULL-Manu-17-1-12-12-

【问题讨论】:

    标签: sql oracle join group-by union


    【解决方案1】:

    我认为按照这种模式,您的目标(我不太清楚)可能更容易实现:

    with Query1 as (select fields from table where conditions are met),
         Query2 as (select fields from table where conditions are met) 
    select  fields 
    from Query1 
         outer join Query2 
         on Query1.identifier_for_match=Query2.identifier_for_match
    where optional conditions are true
    

    注意 - 'identifier_for_match' 在您的情况下可能是e​​mployeeid(这将使其成为Query1/Query2 结果集的必需部分) - 您必须查看模型并弄清楚查询应如何组合行。 此外 - 如果提供表格的 DDL 以及相同的一些数据(包括所需的输出),则更容易提供适合您表格的答案

    【讨论】:

      【解决方案2】:

      只要您要分组的任何字段中有空值,您就会将其作为单独的行接收。我认为您想查看所需的输出,然后我们可以尝试用代码向您解释它。 提示:您可能希望查看 JOIN,并仅在 D.MONTHLY、D.DAILY、D.DESCRIPTION、D.DEPT1 上进行分组,因为其中一个表中缺少您的 DEPT 列。

      【讨论】:

      • 我也尝试过加入,但没有运气,两个查询中都有 DEPT 列,因为表是相同的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多