Как объединить несколько таблиц SQL ORACLE? получить неподдерживаемое использование предложения WITH

#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 ...