已知两张表
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中的金额按照金额顺序进行了拼接。