Этот запрос строит два подзапроса, один для КРЕДИТА, один для ДЕБЕТА.Он использует аналитическую функцию row_number()
, чтобы подделать объединяющий столбец для каждого, основываясь на значении суммы: самый низкий КРЕДИТ связан с самым низким ДЕБИТ, и так далее.Подзапросы FULL OUTER JOINED для обработки висячих значений. (*)
select coalesce (cr.employee_id, db.employee_id) as employee_id
, cr.Credit
, db.Debit
from ( select employee_id
, credit
, row_number() over (partition by employee_id order by credit) as rn
from your_table
where credit is not null ) cr
full outer join
( select employee_id
, debit
, row_number() over (partition by employee_id order by debit) as rn
from your_table
where debit is not null )
on cr.employee_id = db.employee_id
and cr.rn = db.rn
order by 1, 2, 3
/
(*) Очевидно, если ваша фактическая таблица содержит такое соединениестолбец, и вы просто не включили его в свой вопрос, тогда вы должны заменить этот столбец.То же самое, если у вас есть более подходящий столбец для заказа предложения OVER, например, дата транзакции.