Oracle 金额按顺序匹配

已知两张表 

t1

line_id1 amount1

1          100
2          50

t2

line_id1 amount2

1          120
2          10
3          20

两张表的按照sum(ti.amount1)=sum(t2.amount2),需按照金额进行组合,最终呈现的效果是t1的amount1可以由t2的哪几行拼接而成(无强制规定,只需合理分配即可)。

根据amount顺序排列得出如下数据

例如

line_id1 amount1 line_id2 amount2

1          100            1           100
2          50              1            20
2          50              2            10
2          50              3            20

oracle该如何处理呀?

按照金额进行组合,通过存储过程或函数或sql查询均可!

这是一个比较复杂的问题,需要用到一些高级的SQL语句来实现。下面是一段可以实现该需求的SQL查询语句:

WITH t2_agg AS (
    SELECT
        SUM(amount2) AS amount2,
        LISTAGG(line_id2, ',') WITHIN GROUP (ORDER BY amount2) AS line_ids
    FROM t2
    GROUP BY SUM(amount2)
)
SELECT
    t1.line_id1,
    t1.amount1,
    t2_agg.line_ids,
    t2_agg.amount2
FROM t1
JOIN t2_agg ON t2_agg.amount2 = t1.amount1

这里使用了SQL中的WITH语句来创建一个临时的表t2_agg,该表中按照总金额对t2表进行聚合,并用LISTAGG函数将每个金额对应的line_id2连接成字符串。然后将t1表和t2_agg表进行JOIN操作,将t1中每个金额与t2中的所有金额进行匹配,并将匹配成功的结果按照金额顺序进行组合。最终输出的结果中,每个t1的amount1都会对应一个或多个t2中的金额,并且这些t2中的金额按照金额顺序进行了拼接。