17,136
社区成员




现有一个日期别汇率信息管理表 A 和 发票信息管理表B 。其中,A表里, 周末和公休日 是 没有 汇率数据的,B表里 是存储发票信息 (日期, 金额,货币单位)
需要查询的结果是,根据发票信息和汇率信息,查询发票信息的人民币金额
例 :
1. A表 :(其中,模拟的是:2022-03-11 是公休日 , 2022-03-12 ~ 03-13是 周末,所以 这三天, 没有汇率信息)
日期 货币单位 汇率
2022-03-10 USD 8.2345
2022-03-14 USD 8.1234
2. B表 :
发票日期 金额 货币单位
2022-03-11 123.45 USD
2022-03-13 34.56 USD
2022-03-14 89.234 USD
3. 需要的结果
发票日期 外币金额 人民币金额 货币单位
2022-03-11 123.45 (123.45 * 8.2345)= 1016.5490 USD
2022-03-13 34.56 (34.56 * 8.2345)= 284.5843 USD
2022-03-14 89.234 (89.234 * 8.1234)= 724.8835 USD
请问各位高手,这查询QUERY 应该怎么写呢?非常感谢。
OMG, 我怎么就想不到这样的办法呢!
幸亏高手相助,及时解决了业务上的问题,非常感谢。
以后,若有咨询会根据建议,发在相关问答板块,再次感谢!
另外,有问题建议在问答板块也发一下,这样更能及时看到
开窗函数lag有个用法,向上找到非空的值
with
a (日期,货币单位,汇率) as (
select date'2020-03-10','USD',8.2345 from dual union all
select date'2020-03-14','USD',8.1234 from dual),
b (发票日期,金额,货币单位) as (
select date'2020-03-11',123.45,'USD' from dual union all
select date'2020-03-13',34.56,'USD' from dual union all
select date'2020-03-14',89.234,'USD' from dual
)
select * from (
select b.*,
nvl(汇率,
lag(汇率 ignore nulls) over(order by nvl(a.日期, b.发票日期))) 汇率
from b
full join a
on b.发票日期 = a.日期
) where 发票日期 is not null
至于换算,你就自己处理了吧