#sql #oracle
#sql #Oracle
Вопрос:
Я хотел бы объединить несколько таблиц, чтобы получить следующий результат, в моем скрипте я использую предложение «WITH AS». Ниже приведен мой реальный случай:
———TAB1————-
id Amount
-------------------------
1 value1
2 value2
3 value3
4 value4
5 value5
6 value6
7 value7
———TAB2————-
1 value1
3 value3
4 value4
5 value5
6 value6
7 value7
———Результат————
1 value1 value1
2 value2 -
3 value3 value3
4 value4 value4
5 value5 value5
6 value6 value6
7 value7 value7
я попробовал следующий сценарий:
with tabincome as
(with tab1 as (
select branch_code,
ABS(nvl(sum(cr_bal_lcy - dr_bal_lcy), 0)) as A35
from fcubs1203.gltb_gl_bal_daily
where gl_code in ('522000000','521103000')
AND trn_dt = amp;PM_DATE
group by branch_code ),
tab2 as (
select branch_code,
ABS(nvl(sum(cr_bal_lcy - dr_bal_lcy), 0)) as A35
from fcubs1203.gltb_gl_bal_daily
where gl_code in ('504406000','504407000','504408000','504409000','504613000','504614000','504615000','504616000')
AND trn_dt = amp;PM_DATE
group by branch_code
)
select tab1.branch_code as BRINCOME, tab1.a35 - coalesce(tab2.a35, 0) AMINCOME
from tab1
left join tab2 on tab1.branch_code = tab2.branch_code
order by tab1.branch_code),
tabexpense as
(with tab1 as (
select branch_code,
ABS(nvl(sum(cr_bal_lcy - dr_bal_lcy), 0)) as A35
from fcubs1203.gltb_gl_bal_daily
where gl_code in ('620700000','620820000','620220000','620210000','620500000')
AND trn_dt = amp;PM_DATE
group by branch_code ),
tab2 as (
select branch_code,
ABS(nvl(sum(cr_bal_lcy - dr_bal_lcy), 0)) as A35
from fcubs1203.gltb_gl_bal_daily
where gl_code in ('620820000', '630300000','612070000')
AND trn_dt = amp;PM_DATE
group by branch_code
)
select tab1.branch_code as BREXP, tab1.a35 - coalesce(tab2.a35, 0) as AMEXP
from tab1
left join tab2 on tab1.branch_code = tab2.branch_code)
SELECT tabincome.BRINCOME, tabincome.AMINCOME - coalesce(tabexpense.AMEXP, 0) as AMEXP
FROM tabincome
LEFT JOIN tabexpense ON tabincome.BRINCOME = tabexpense.BREXP
Комментарии:
1. Можете ли вы также показать нам, что вы пробовали до сих пор?
2. хорошо, проверьте сообщение еще раз, я его обновил
3. Oracle Database и Microsoft SQL Server — это разные, не связанные между собой программы, выпускаемые разными компаниями. Пожалуйста, установите правильные теги для запроса.
4. @axiac , спасибо за помощь 🙂
5. Вы не можете складывать общие табличные выражения подобным образом. Вам нужно записать их один за другим. Что-то вроде:
with tab1 as (...), tab2 as (...), income as (...), expense as (...) select * from income join expense on ...