Объединение транзакций по идентификатору в одной таблице - PullRequest
0 голосов
/ 27 июня 2019

У меня есть таблица транзакций с полями:

TRAN_ID    DATE     ACCNT_ID    NAME      AMOUNT    TRAN_TYPE

Для данной транзакции, которая дебетует счет одного клиента и кредитует другой, я могу иметь:

Клиент 1

TRAN_ID    DATE     ACCNT_ID     NAME      AMOUNT    TRAN_TYPE
0000001   10/10/17     AA1     Joe Burns     50        Debit

Заказчик 2:

TRAN_ID    DATE     ACCNT_ID     NAME      AMOUNT    TRAN_TYPE
0000001   10/10/17     AA2     Mary Adams    50        Credit

Есть ли способ объединить эту таблицу, в которой указаны идентификатор транзакции, отправитель, получатель и сумма?

Ответы [ 3 ]

1 голос
/ 27 июня 2019

Вы можете попробовать вот так, самостоятельно присоединяясь к таблице, где один для дебета, а другой для кредита,

SELECT R.NAME as RECIEVER,S.NAME as SENDER,R.AMOUNT as AMOUNT
FROM
        (Select * from
        Table
        where TRAN_TYPE='Debit') as R
        INNER JOIN
        (Select * from
        Table
        where TRAN_TYPE='Credit') as S
        on R.TRAN_ID=S.TRAN_ID
0 голосов
/ 27 июня 2019

Вы можете выполнить самостоятельное объединение:

select tr.tran_id, tr.name as receiver, ts.name as sender,
       tr.amount
from transactions tr join
     transactions ts
     on tr.tran_id = ts.tran_id and
        tr.tran_type = 'credit' and
        ts.tran_type = 'debit';

Обратите внимание, что это не проверяет, совпадают ли столбцы amount и date.И он возвращает только транзакции, которые имеют обе записи.

0 голосов
/ 27 июня 2019

Самостоятельное присоединение, я полагаю:

SQL> with tran (tran_id, datum, accnt_id, name, amount, tran_type) as
  2    (select '001', date '2017-10-10', 'aa1', 'Joe Burns' , 50, 'Debit' from dual
  3     union all
  4     select '001', date '2017-10-10', 'aa2', 'Mary Adams', 50, 'Credit' from dual
  5    )
  6  -- self-join
  7  select c.tran_id, c.datum, c.name credit_name, d.name debit_name, c.amount
  8  from tran c join tran d on c.tran_id = d.tran_id
  9       and c.tran_type = 'Credit'
 10       and d.tran_type = 'Debit';

TRA DATUM    CREDIT_NAM DEBIT_NAME     AMOUNT
--- -------- ---------- ---------- ----------
001 10.10.17 Mary Adams Joe Burns          50

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