TSQL - 如何根据同一用户的其他货币汇率确定用户货币汇率是否正确

时间:2015-11-20 16:53:57

标签: sql tsql compare currency rate

我们目前有一个问题,即用户的某些费率没有正确输入,我的任务是找出哪些条目不正确,但不幸的是我有点卡住了。

要求如下;

  • 如果用户只有英镑退款率,则不执行任何操作
  • 如果用户有英镑+美元的充值率,那么;       GBP必须= USD / 1.55否则为FALSE

以下是我开始的方式:

我们有一个名为TIMERATE的表,其中输入了用户退款率,每次费率更改时都会添加新行。用户可以以多种货币获得收费率。

以下是单个用户的表格数据剪切;

tkinit  tkeffdate   tkrt01  tkrtcur
LAU 01/02/2014  170 GBP
LAU 01/08/2014  260 GBP
LAU 01/12/2014  130 GBP
LAU 01/08/2014  260 USD
LAU 01/12/2014  210 USD
LAU 01/02/2015  260 USD

查找每种货币的最新汇率:

SELECT
    TKINIT as Timekeeper,
    MAX (tkeffdate) as MaxEffectiveDate,
    tkrtcur as Currency,
    Cast (NULL as decimal (16,2)) as Rate
INTO
    #LatestRate
FROM
    TIMERATE
GROUP BY
    TKINIT, tkrtcur
ORDER BY
    TKINIT

然后我更新了临时表中的费率

update 
    #LatestRate
Set 
    Rate = tkrt01
from 
    #LatestRate
JOIN 
    Timerate on TKINIT = Timekeeper 
        and tkrtcur = Currency 
        and tkeffdate = MaxEffectiveDate

所以我现在为每个用户提供每种货币的最新汇率,但我不知道如何操纵数据以满足要求

有没有人有任何想法?我是否以错误的方式解决了这个问题?

2 个答案:

答案 0 :(得分:0)

将表加入自己的tkinit和日期,其中一方有gbp而另一方有usd。这将为您提供一行,以便您可以检查费率是否正确。

答案 1 :(得分:0)

Rabbit的答案是比较转换是否正确完成的最简单方法。 完成初始步骤后,您可以在#LatestRate表上运行此查询以获得结果。请确保case语句中的比较正常工作。我还没有测试过这段代码。

SELECT
    GBP.Timekeeper as Timekeeper,
    GBP.MaxEffectiveDate as EffectiveDate,
    GBP.Currency as GBP,
    GBP.Rate as GBPRate,
    USD.Currency as USD,
    USD.Rate as USDRate,
    case 
        when USD.Rate is null then 'GBP Only' 
        when round(USD.Rate/1.55,2)=round(GBP.Rate,2) then 'Correct Conversion'
        else 'FALSE'
    end as IsConversion
FROM #LatestRate GBP
INNER JOIN #LatestRate USD
ON GBP.Timekeeper=USD.Timekeeper
and GBP.MaxEffectiveDate=USD.MaxEffectiveDate
and GBP.Currency='GBP' and USD.Currency='USD'
相关问题