1

我有一个棘手的场景。

表中数据如下

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

如果有人有解决方案,请帮助。

4

2 回答 2

2

对于这个数据集,应该这样做:

order by
    customerId,
    abs(transaction_amount),
    transaction_amount desc

这种排序不关心交易类型,而只关心金额。金额绝对值的标准将具有相反值的记录联系起来,然后下一个标准将正值放在首位。

于 2020-02-13T21:34:09.420 回答
1

问题尚不清楚,但我的解释是 OP 希望将付款和反向交错。这表明窗口函数:

order by customerid,
         abs(transactionamount),
         row_number() over (partition by customerid, transactiontype, abs(transactionamout) order by customerid),
         transactiontype asc
于 2020-02-13T23:25:44.187 回答