我有两个表,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
感谢任何帮助。这是一个很好的方法吗?有没有更好的方法?
答案 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