我有一个Oracle SQL(select *)查询,该查询假脱机批处理事务信息,其结果将主发送者和接收者输出到同一事务的不同行,如下所示:
BATCH_NO DATE AMOUNT SENDER_ACCT_NO SENDER NAME RECEIVER_ACCT_NO RECEIVER NAME
12345678 15-May-20 103.55 400001000 ENDCORP (null)
12345678 15-May-20 34.55 400001000 (null) 78909909 JOHN SMITH
12345678 15-May-20 44.00 400001000 (null) 78853229 HENRY FAGIL
12345678 15-May-20 4.00 400001000 (null) 76849852 BENJAMIN HOOK
12345678 15-May-20 21.00 400001000 (null) 72555099 FELIX MAGS
12222222 16-May-20 1902.00 400000105 ZENDCORP (null)
12222222 17-May-20 1899.00 400000105 (null) 90333300 KEN GOTL
12222222 18-May-20 3.00 400000105 (null) 90127765 JONES MAST
在这种情况下,ENDCORP和ZENDCORP分别向4个和2个客户发出了总计103.55和1902.00的批量付款。
但是,我希望我的结果采用以下形式:
BATCH_NO DATE AMOUNT SENDER_ACCT_NO SENDER NAME RECEIVER_ACCT_NO RECEIVER NAME
12345678 15-May-20 34.55 400001000 ENDCORP 78909909 JOHN SMITH
12345678 15-May-20 44.00 400001000 ENDCORP 78853229 HENRY FAGIL
12345678 15-May-20 4.00 400001000 ENDCORP 76849852 BENJAMIN HOOK
12345678 15-May-20 21.00 400001000 ENDCORP 72555099 FELIX MAGS
12222222 17-May-20 1899.00 400000105 ZENDCORP 90333300 KEN GOTL
12222222 18-May-20 3.00 400000105 ZENDCORP 90127765 JONES MAST
我希望能获得有关如何针对此结果制定查询的指南
答案 0 :(得分:0)
我假设当您说查询为select *时,您正在向我们显示表结构。否则,我们将需要更多有关表和查询的详细信息。
如果它是一个表,则只需选择发件人名称为null的位置,并在发件人帐户号为no且发件人名称不为null的情况下连接到同一表,则从每个关系中选择适当的列。
答案 1 :(得分:0)
我认为您可以使用窗口函数来输入名称,然后进行过滤:
select . . . -- columns you want
from (select t.*,
max(sender_name) over (partition by batch_no) as imputed_sender_name
from t
) t
where RECEIVER_ACCT_NO is not null;