【问题标题】:How to bring exchange rate sql query如何带汇率sql查询
【发布时间】:2020-07-15 09:07:50
【问题描述】:

我有一个表(表 1),其中包含以不同货币存储的付款,另一个表(表 2)包含货币兑换率,如下所示。

表 1

表2

我想导出一个生成如下数据的查询:

无论使用何种货币付款,结果都应根据付款当天的汇率以每行 LEI 和 EUR 显示。

例如。

ID   Value  Date of payment   Currency
XX1   100    10.07.2020         EUR

   Date      Currency  Ex_Rate
10.07.2020     EUR      4.5537

出口应该是:

ID   Date of payment    Value[LEI]   Value[EUR]
XX1    10.07.2020        455.37        100 

【问题讨论】:

  • 你能分享你到目前为止写的查询吗?

标签: sql postgresql


【解决方案1】:

试试这个:

SELECT
 t1.ID
 ,t1.date_of_payment
 ,CASE WHEN t1.currency='LEI' THEN payment ELSE payment*t2.exchange_rate END as Value[LEI]
 ,CASE WHEN t1.currency='EUR' 
        THEN payment 
      ELSE CASE WHEN t1.currency='LEI' THEN payment/t3.exchange_rate 
           ELSE payment*t2.exchange_rate/t3.exchange_rate 
           END 
    END as Value[EUR]
FROM Table1 t1
LEFT JOIN Table2 t2 ON t2.AtDate=t1.date_of_payment and t2.code=t1.currency
LEFT JOIN Table2 t3 ON t3.AtDate=t1.date_of_payment and t3.code='EUR'

据我所知,周末汇率会冻结。因此,如果您在周末收到付款并且您的周末汇率表中没有条目,您可能需要调整查询。

【讨论】:

  • 谢谢加比。您能否将带有“,”的值导出为十进制而不是“。”?
  • 我尝试使用 replace(cast(t1."PAYVal"/t3."EXCValue" as decimal(12,2)), '.', ',') 但我有一个错误
  • 我认为它应该可以工作,您只需要将其转换为 varchar(32) 而不是 decimal(12,2) 即可,因为替换适用于字符串。
  • 我发布了一个新问题,我在其中加载了提供的代码。我想补充一点。你能检查一下吗? stackoverflow.com/questions/62915010/…
猜你喜欢
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2013-12-20
  • 2021-11-16
相关资源
最近更新 更多