powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / JOIN по двум полям с датой
6 сообщений из 6, страница 1 из 1
JOIN по двум полям с датой
    #39764895
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, помогите с запросом

Написал код, не могу догнать, как сделать

select
t1.account_number,
sum(t1.sum) as charge_tv,
trunc(t1.charge_date,'month') as data_charge,
t2.pay_sum,
trunc(pay_date,'month')
from charge t1
left join (
select
account_num,
status,
sum(amount_rur) as pay_sum,
trunc(pay_date,'month') as data_pay
from payments
where
pay_date >=to_date('01.10.2018','dd.mm.yyyy') and
pay_date < to_date('01.01.2019','dd.mm.yyyy') and
status = 0
group by trunc(pay_date,'month'),account_num,status) t2
on t1.account_number=t2.account_num and
trunc(t1.charge_date,'month')=trunc(pay_date,'month')
where
t1.charge_date >= to_date('01.10.2018','dd.mm.yyyy') and
t1.charge_date < to_date('01.01.2019','dd.mm.yyyy') and
group by trunc(t1.charge_date,'month'),trunc(pay_date,'month'), t1.account_number,t2.pay_sum


В этом случае выводится следующее

677 21 01.10.18 17 01.10.18
677 21 01.11.18 15 01.11.18
677 21 01.12.18 10 01.12.18
677 21 01.11.18 10 01.11.18
677 21 01.10.18 15 01.10.18
677 21 01.11.18 17 01.11.18
677 21 01.12.18 15 01.12.18
677 21 01.12.18 17 01.12.18
677 21 01.10.18 10 01.10.18

В общем есть две таблицы, у которых есть ключ - account_number, есть суммы по датам.

Мне нужно так:
Если есть в первой таблице

acc_num date charge
677 01.10.18 21
677 01.11.18 21

А во второй таблице

acc_num date pay
677 01.10.18 10
677 01.11.18 15

Объединение работало так:

acc_num date charge pay
677 01.10.18 21 10
677 01.11.18 21 15

Как это можно сделать?
...
Рейтинг: 0 / 0
JOIN по двум полям с датой
    #39764902
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STFF соединение по порядковому номеру
...
Рейтинг: 0 / 0
JOIN по двум полям с датой
    #39764905
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

Можно поподробнее, пожалуйста? Я не особый знаток
...
Рейтинг: 0 / 0
JOIN по двум полям с датой
    #39764963
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o.makarovОбъединение работало так:

acc_num date charge pay
677 01.10.18 21 10
677 01.11.18 21 15

Как это можно сделать?

я не совсем понял что надо
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  1  with t1 (acc_num, dat,charge) as (
  2  select 677,'01.10.18',21 from dual union all
  3  select 677,'01.11.18',21 from dual union all
  4  select 677,'01.12.18',22 from dual union all
  5  select 777,'01.12.18',27 from dual )
  6  ,t2 (acc_num,dat,pay) as (
  7  select 677,'01.10.18',10 from dual union all
  8  select 677,'01.11.18',15 from dual union all
  9  select 677,'01.01.19',19 from dual union all
 10  select 777,'01.01.18',77 from dual )
 11  select
 12   nvl(t1.acc_num,t2.acc_num) acc
 13  ,nvl(t1.dat,t2.dat) dat
 14  ,pay
 15  ,charge
 16  from t1 full outer join t2
 17  on (to_char(t1.acc_num,'99999')||t1.dat=to_char(t2.acc_num,'99999')||t2.dat)
 18* order by 1,2
SQL> /

       ACC DAT             PAY     CHARGE
---------- -------- ---------- ----------
       677 01.01.19         19
       677 01.10.18         10         21
       677 01.11.18         15         21
       677 01.12.18                    22
       777 01.01.18         77
       777 01.12.18                    27

6 rows selected.



зи
мож вам надо намного проще (схематично)

select acc_id,trunc(dat,'MM'),sum(sum) as charge_tv,sum(amount_rur) pay_sum from
(select acc_id,dat,sum,0 amount_rur from t1 where ....
UNION all
select acc_id,dat,0,amount_rur from t2 where ....
) group by acc_id,trunc(dat,'MM')

......
stax
...
Рейтинг: 0 / 0
JOIN по двум полям с датой
    #39764968
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,

спасибо большое, протестирую чуть позже.

Суть в том, что есть список аккаунтов с суммами на конкретную дату из одной таблицы и список аккаунтов с суммами на конкретную дату из второй таблицы.

То есть, условно, говоря есть аккаунт 1 с суммой 100 на дату 01.10.2018 и аккаунт 1 с суммой 20 на дату 01.10.2018

Мне нужно получить колонки 1| 01.10.2018| 100| 20|

А мне подтягиваются все суммы из выбранного диапазона, то есть если у аккаунт 1 во второй таблице есть сумма 20 на 01.10.2018 и сумма 30 на 01.11.2018, мне подтянется

1|01.10.2018|100|20
1|01.10.2018|100|30
...
Рейтинг: 0 / 0
JOIN по двум полям с датой
    #39764990
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o.makarov1|01.10.2018|100|20
1|01.10.2018|100|30
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SQL> ed
Wrote file afiedt.buf

  1  with t1 (acc_num, dat,charge) as (
  2  select 677,'01.10.18',20 from dual union all
  3  select 677,'01.11.18',30 from dual union all
  4  select 777,'01.12.18',27 from dual )
  5  ,t2 (acc_num,dat,pay) as (
  6  select 677,'01.10.18',100 from dual union all
  7  select 777,'01.01.18',77 from dual )
  8  select acc_num,dat,sum(pay) pay,sum(charge) charge from
  9  (select acc_num, dat,cast(null as number) pay,charge from t1
 10   UNION ALL
 11   select acc_num,dat,pay,null from t2
 12  ) group by acc_num,dat
 13* order by 1,2
SQL> /

   ACC_NUM DAT             PAY     CHARGE
---------- -------- ---------- ----------
       677 01.10.18        100         20
       677 01.11.18                    30
       777 01.01.18         77
       777 01.12.18                    27



....
stax
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / JOIN по двум полям с датой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]