нужен оракул SQL запрос - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть простая проблема.

У меня есть такая таблица:

Employee id -  Debit - Credit
    1      -   100  -  null
    1      -   200  -  null
    1      -   300  -  null
    1      -   null -  700
    1      -   null -  800
    1      -   null -  900

Я хочу запрос, который генерирует такой результат

EmpId -credit - Debit
 1    -  100    -  700
 1    -  200    -  800
 1    -  300    -  900

заранее спасибо всем, кто может помочь.

1 Ответ

0 голосов
/ 05 декабря 2018

Этот запрос строит два подзапроса, один для КРЕДИТА, один для ДЕБЕТА.Он использует аналитическую функцию 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, например, дата транзакции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...