Объединение двух строк в Oracle

Причина слияния двух строк в том, что таблица, на которую я ссылаюсь, хранит транзакции как в дебетовых, так и в кредитных операциях. следовательно, всякий раз, когда происходит транзакция, в таблицу всегда добавляются две новые записи: одна для дебета и одна для кредита. Что мне нужно сделать, это объединить эти две связанные транзакции, например:

объединение двух связанных строк

во что-то похожее на это:

образец объединенного ряда

забыл одну вещь. как сумма Дебета и Кредита определяется этим кодом:

CASE WHEN DTD.PART_TRAN_TYPE = 'D'
        THEN (DTD.TRAN_AMT)
        ELSE null
    END DR_Amount,
    CASE WHEN DTD.PART_TRAN_TYPE = 'C'
        THEN (DTD.TRAN_AMT)
        ELSE null
    END CR_Amount,

суммы просто приходят из одной таблицы.

2 ответа

Здесь вы хотите запрос SQL JOIN.

Предполагая, что имя таблицы 'trans', что-то вроде:

SELECT table1.TRANSACTION_ID, table1.ACCT_CURRENCY, 
    table1.DR_AMOUNT, table2.CR_AMOUNT
FROM trans table1
INNER JOIN trans table2 on table1.TRANSACTION_ID = table2.TRANSACTION_ID

Это использует INNER JOIN для соединения таблицы 'trans' с самим собой. Мы делаем это, присваивая таблице псевдоним ("FROM trans table1" позволяет нам ссылаться на экземпляр trans с "table1"). Оператор on указывает Oracle взять каждую запись из таблицы table1 и присоединить ее к записи из таблицы table2, имеющей то же значение поля "TRANSACTION_ID".

В вашем случае у вас будет запись с кредитной или дебетовой стоимостью.

Рассмотрим имя таблицы как TRANS_INFO с образцом записи

введите описание изображения здесь

Запрос:

SELECT * FROM TRANS_INFO CR_TABLE INNER JOIN TRANS_INFO DR_TABLE ON CR_TABLE.TRANS_ID = DR_TABLE.TRANS_ID AND (CR_TABLE.CR_AMOUNT <> '') И (DR_TABLE.DR_AMOUNT <> '')

OutPut: как объединенная строка на основе TRANS_ID

введите описание изображения здесь

Другие вопросы по тегам