我们目前有一个问题,即用户的某些费率没有正确输入,我的任务是找出哪些条目不正确,但不幸的是我有点卡住了。
要求如下;
以下是我开始的方式:
我们有一个名为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
所以我现在为每个用户提供每种货币的最新汇率,但我不知道如何操纵数据以满足要求
有没有人有任何想法?我是否以错误的方式解决了这个问题?
答案 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'