【发布时间】:2014-01-28 10:07:33
【问题描述】:
好的,我需要一些帮助来解决我面临的问题。 我正在做一个数据库项目,在将货币价值从各种不同的货币转换为美元时遇到了问题。
我遇到困难的原因是我需要以原始货币格式维护原始记录,但我还必须能够将这些值转换为美元,然后执行一些动态查询来总结特定的值记录,然后将最终结果输出到一系列报告中。
我已经有一个表格,其中包含我的所有交易(包括货币类型字段和几个货币价值字段(每条记录 12 个字段)) 我有第二个表,其中包含货币类型的参考列表以及基于它们与美元的关系在 12 个月内的必要转换率(同样是 12 个数字字段)。 (即,输入美元后会跟随 12 个字段,对于 1 比 1 的汇率,所有字段的值都为 1)
我希望能够运行一个查询,将记录从我的交易表中复制到一个新表中,然后将它们全部转换为美元等值值。但是,我不是编写此类查询的专家,希望得到一些帮助。是否可以将 where 子句写入查询中的表达式,以便从事务中获取每条记录,找到正确月份的正确转换率,进行数学运算并输出到具有修改值的相同记录的另一个表?
或者有没有办法使用 VBA 脚本来执行相同的功能?如果是这样,您会对该代码提出什么样的建议?
进展/解决方案更新 因此,在查看了这里的解决方案和 cmets 之后,这是我想出的解决方案。 我以我想要的 CurrencyName 格式构建了我的汇率表 (ExRates),然后是 12 个月中每个月的转换率(这是由于必须使用现有的数据库元素)
构建了以下 2 个查询 Match & Convert
SELECT ForcastTrans.*, ExRates.JanRate, ExRates.FebRate, ExRates.MarRate, ExRates.AprRate, ExRates.MayRate, ExRates.JunRate, ExRates.JulRate, ExRates.AugRate, ExRates.SepRate, ExRates.OctRate, ExRates.NovRate, ExRates.DecRate
FROM ForcastTrans, ExRates
WHERE ForcastTrans.Currency=ExRates.CurrencyName;
SELECT qryExRatematch.EntityID, qryExRatematch.Account, qryExRatematch.Currency, [qryExRatematch]![Month1]*[qryExRatematch]![JanRate] AS Jan, [qryExRatematch]![Month2]*[qryExRatematch]![FebRate] AS Feb, [qryExRatematch]![Month3]*[qryExRatematch]![MarRate] AS Mar, [qryExRatematch]![Month4]*[qryExRatematch]![AprRate] AS Apr, [qryExRatematch]![Month6]*[qryExRatematch]![JunRate] AS Jun, [qryExRatematch]![Month7]*[qryExRatematch]![JulRate] AS Jul, [qryExRatematch]![Month8]*[qryExRatematch]![AugRate] AS Aug, [qryExRatematch]![Month9]*[qryExRatematch]![SepRate] AS Sep, [qryExRatematch]![Month10]*[qryExRatematch]![OctRate] AS Oct, [qryExRatematch]![Month11]*[qryExRatematch]![NovRate] AS Nov, [qryExRatematch]![Month12]*[qryExRatematch]![DecRate] AS [Dec]
FROM qryExRatematch
ORDER BY qryExRatematch.EntityID, qryExRatematch.Account, qryExRatematch.Currency;
这些为我提供了所需的转换,我可以将我的报告查询重新连接到这些表,而不是在没有转换的情况下完成的原始查询。
感谢大家的帮助、建议和意见,我将这个答案归功于 Johnny Bones,因为他的回答引导我进行实验,帮助我找到解决方案。
再次感谢您的帮助
【问题讨论】:
-
我不愿建议一系列嵌入的IIF 语句。您应该能够通过 JOIN 完成此操作。您可能应该更加规范化您的转换表 - 将每个月放在自己的行中以使连接更容易。
-
我试图避免过度规范化我的数据(已经有这个问题)我可以将交换器规范化到一个单独的表中。你会建议我如何构建这样一个表?
-
第三范式是not over-规范化。范式是为了解决常见问题而创建的,数十年的使用证明它非常擅长完成工作。
-
也许我误解了你。我最初的意图是设置表格,以便每一行都是特定类型的货币,月份是列标题。您是否建议我将其反转,以便不同的列标题是不同的货币,而行代表特定的月份?