Объединить результат двух запросов с одинаковым столбцом в Oracle - PullRequest
0 голосов
/ 18 марта 2019

Я использую 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

он дает мне вывод, подобный этому

-DEPT-HR-DLR-MONTHLY-DESC-DAILY-DEPT-HR-DLR-

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

-NULL-NULL-NULL-NULL-Мана-17-1-12-12-

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Я думаю, что вашей цели (которая мне не совсем понятна), возможно, будет легче достичь, следуя этой схеме:

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» может быть employeeid (что может привести кэто обязательная часть набора результатов Query1 / Query2) - вам нужно взглянуть на модель и выяснить, как запрос должен объединять строки.Кроме того, ответ, подходящий для ваших таблиц, легче предоставить, если указан DDL для таблиц и некоторые данные для него (включая желаемый результат)

0 голосов
/ 18 марта 2019

Пока у вас есть нулевое значение в любом из полей, по которым вы хотите сгруппировать данные, вы получите его в виде отдельной строки. Я думаю, что вы захотите просмотреть нужный вам вывод, тогда мы можем попытаться перефразировать его с помощью кода для вас. Подсказка: вы можете захотеть взглянуть на JOIN и сгруппировать только по D.MONTHLY, D.DAILY, D.DESCRIPTION, D.DEPT1, потому что ваш столбец DEPT отсутствует в одной из таблиц.

...