with
sample_data(tx_date, p_from, p_to, qty, tx_type) as (
select to_date('01012020','ddmmyyyy'), 'A', 'B', 100, 'LEND' from dual union all
select to_date('01042020','ddmmyyyy'), 'A', 'B', 200, 'LEND' from dual union all
select to_date('01092020','ddmmyyyy'), 'A', 'B', 300, 'LEND' from dual union all
select to_date('02012020','ddmmyyyy'), 'A', 'C', 50, 'LEND' from dual union all
select to_date('02062020','ddmmyyyy'), 'A', 'C', 300, 'LEND' from dual union all
select to_date('02042020','ddmmyyyy'), 'C', 'A', 50, 'REPAY' from dual union all
select to_date('03042020','ddmmyyyy'), 'D', 'A', 200, 'LEND' from dual union all
select to_date('04062020','ddmmyyyy'), 'A', 'D', 200, 'REPAY' from dual
)
select p_from, p_to, nvl(lend, 0) as lend, nvl(repay, 0) as repay
from (select case tx_type when 'LEND' then p_from else p_to end as p_from
, case tx_type when 'LEND' then p_to else p_from end as p_to
, qty, tx_type
from sample_data
)
pivot (sum(qty) for tx_type in ('LEND' as lend, 'REPAY' as repay))
order by p_from, p_to -- or whatever you need to order by
;
P_FROM P_TO LEND REPAY
------ ------ ---------- ----------
A B 600 0
A C 350 50
D A 200 200
Обратите внимание, что FROM
- зарезервированное ключевое слово, как и DATE
- я использовал несколько другие имена столбцов, поэтому они не содержат sh с ключевыми словами SQL.