【发布时间】:2013-12-11 15:55:58
【问题描述】:
我有一张transactions 的表格。这些字段有id、trans_date、amount、currency。
我有另一个表 fx_rates,其中包含字段 id、fx_date、currency、rate_to_gbp。
我希望汇总某个日期的英镑交易金额。例如
SELECT format(transactions.trans_date, "mm-yyyy") as monthyear, sum(transactions.amount) as amount_sum
FROM transactions
GROUP BY format(transactions.trans_date, "mm-yyyy");
但我的一些交易不是英镑。是否可以使用子查询对具有transactions.currency <> "GBP" 的字段进行货币转换?
类似:
sum(iif(transactions.currency = "GBP",
transactions.amount,
transactions.amount / (
SELECT fx_rates.rate_to_gbp
WHERE fx_rates.currency = transactions.currency
AND transactions.trans_date = fx_rates.fx_date
))
???
编辑:下面的示例数据...
交易:
id account_id trans_date amount currency
----------------------------------------------------
1797 GFSS35 28/01/2005 365000 USD
1798 LA1F8 04/03/2005 100247.57
1799 IDFS12 31/03/2005 2396.89 GBP
1800 DF088 06/04/2005 14000 EUR
1801 BGD005 18/05/2005 450000
外汇汇率:
id fx_date currency rate_to_gbp
-------------------------------------------
3367 25/11/2018 USD 1.62
3368 25/11/2018 EUR 1.2
3369 25/11/2018 CHF 1.47
3412 11/12/2013 USD 1.64
3413 11/12/2013 EUR 1.2
3414 11/12/2013 CHF 1.46
【问题讨论】:
-
fx_rates表包含一个fx_date字段。这是否意味着每个currency可以有不止一行,并且您必须引用fx_date字段来确定其中哪些适用于特定的transactions.trans_date? -
在外汇汇率表中,每个货币日期组合不应超过 1 行,因为该表有一个复合唯一键。但我明白你的意思,更新的问题
-
请为这两个表添加简短的数据样本,并向我们展示您希望从这些数据中获得的输出。
-
我无法告诉你看到“格式错误”的日期是多么令人反感。 :-(
-
我同意,但这只是 MS Access 的输出。我使用它实践的 ISO 格式。