SQL:货币从给定货币到目标货币的转换

时间:2016-10-05 19:27:26

标签: sql sql-server

enter image description here

我有两个表,Table1有金额,金额货币和目的地货币,而Table2有转换率(如图像对话率所述,以美元计)。

我想做什么:

将金额从amountCurrency转换为目标货币,并在Table1的最后一列中更新它

示例:Table1的第一行中的金额在INR中,我想将其转换为CAD。按照数学计算,我将从Table2给定的conversion_date获得1 INR的会话速率乘以AmountCurrency。像,

select Rate from Table1 where converstion_Date = '2014-06-30' and Currency = 'INR'.

以上查询将给我0.0160752000,我们将INR兑换成美元,即  100 * 0.0160752000 = 1.60752美元
由于我们要将其转换为CAD,因此在给定的conversion_date,1 CAD = 0.9399380000美元的转换率为1加元,现在我们需要将1.60752美元转换为CAD,可以通过将其除以CAD率来完成,即1.60752 / 1.60752 = 1.71024 CAD 。

我的Table1有大约10000行,Table2具有所有日期到目前为止所有货币的转换率。迭代Table1行并进行转换并在 CalculateAmountInDestinationCurrency 列中更新它的最佳方法是什么。

我想要有一个循环,

While (Select Count(*) From Table1) > 0
begin

// step1 : Get top row   

//step2 : Get conversition rate for  **Amountcurrency** using select query to table2   

//step3 : Multiply with amount (Here we have USD value for amount)    

//step4: Get conversion rate for **DestinationCurrency**   

//step5: Divide USD Amount with result from step 4    

//Update   

end

感谢任何帮助。这是一个很好的方法吗?有没有更好的方法?

1 个答案:

答案 0 :(得分:3)

您只需要一个查询,其中包含基表的实例和转换表的两个实例,一个在base.amountCurrency = rate.currency上加入,另一个在base.destinationCurrency = rate.currency上加入。如果您需要添加conversion_date条件,那么您也可以这样做,如果您对每种货币的费率随着时间的推移而有多种费率,并且您想要最新的货币,或者以最新的货币为准。

类似的东西:

select
  b.*,
  a.rate as rate_amount,
  d.rate as rate_destination,
  amount * a.rate / d.rate as amtInDestCurrency
from
  base b inner join 
  rate a on
  b.amountcurrency = a.currency and
  b.conversion_date = a.conversion_date inner join
  rate d on 
  b.destinationCurrency = d.currency and
  b.conversion_date = d.conversion_date