SQL将具有常见批号的两行合并为一行

时间:2020-05-31 19:25:43

标签: sql oracle

我有一个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

我希望能获得有关如何针对此结果制定查询的指南

2 个答案:

答案 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;
相关问题