сортировка данных в oracle - PullRequest
1 голос
/ 14 февраля 2020

У меня сложный сценарий.

Данные в таблице следующие:

CustomerId  Transaction Type    Transaction Amount
1               Payment          100
1               payment          200
1               ReversePayment  -100
1               ReversePayment  -200

У меня есть транснациональная таблица с типами транзакций "Payment", "ReversePayment". Для клиента существует несколько записей, некоторые из которых - «Платеж», а некоторые - «Обратный платеж».

Существует ли способ сортировки данных следующим образом

CustomerId  Transaction Type    Transaction Amount
1               Payment              100
1               ReversePayment      -100
1               payment              200
1               ReversePayment      -200

Если у кого-то есть решение, пожалуйста, помогите .

Ответы [ 2 ]

2 голосов
/ 14 февраля 2020

Для этого набора данных это должно быть сделано:

order by
    customerId,
    abs(transaction_amount),
    transaction_amount desc

Этот вид не беспокоится о типе транзакции, а только о суммах. Критерии абсолютного значения количества связывают записи, имеющие противоположные значения, затем следующий критерий ставит положительное значение первым.

1 голос
/ 14 февраля 2020

Вопрос неясен, но моя интерпретация заключается в том, что ОП хочет чередовать платежи и меняет направление. Это предполагает оконные функции:

order by customerid,
         abs(transactionamount),
         row_number() over (partition by customerid, transactiontype, abs(transactionamout) order by customerid),
         transactiontype asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...