ORACLE 内汇率查询 Query 咨询

qq_41493762 2022-03-14 17:29:15

现有一个日期别汇率信息管理表 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 应该怎么写呢?非常感谢。

...全文
353 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_41493762 2022-03-16
  • 打赏
  • 举报
回复

OMG, 我怎么就想不到这样的办法呢!
幸亏高手相助,及时解决了业务上的问题,非常感谢。
以后,若有咨询会根据建议,发在相关问答板块,再次感谢!

DarkAthena 2022-03-15
  • 打赏
  • 举报
回复

另外,有问题建议在问答板块也发一下,这样更能及时看到

DarkAthena 2022-03-15
  • 打赏
  • 举报
回复

开窗函数lag有个用法,向上找到非空的值

img

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

img

至于换算,你就自己处理了吧

17,136

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧