2013-12-11 72 views
0

我有一個transactions表。這些字段有id,trans_date,amountcurrency子查詢對彙總查詢執行FX計算

我有另一個表fx_rates與領域idfx_datecurrencyrate_to_gbp

我希望彙總某一日期的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   
+0

'fx_rates'表包含'fx_date'字段。這是否意味着每個'currency'可以有多行,並且您必須引用'fx_date'字段來確定哪些行適用於特定的'transactions.trans_date'? – HansUp

+0

在外匯匯率表中,每個貨幣日期組合不應該多於1行,因爲有一個表的複合唯一鍵。但我明白你的意思了,更新後的問題 – harryg

+0

請爲這兩張表格添加簡短的數據樣本,並向我們展示這些數據的期望輸出。 – HansUp

回答

1

看起來你應該做一個連接。

SELECT format(transactions.trans_date, "mm-yyyy") as monthyear, 
    SUM(IIF(transactions.currency = "GBP" OR transactions.currency = "", 
    transactions.amount, 
    transactions.amount/fx_rates.rate_to_gbp)) AS amount_sum 
FROM transactions 
LEFT JOIN fx_rates 
ON fx_rates.currency = transactions.currency 
AND transactions.trans_date = fx_rates.fx_date 
GROUP BY format(transactions.trans_date, "mm-yyyy"); 

我選擇LEFT JOIN,因爲我不知道是否有將在fx_rates表時transactions.currency =「英鎊」有相應的記錄。如果應該的話,我會使用INNER JOIN來避免任何fx_rates.rate_to_gbp可能爲空的情況。

+0

如果在我的'fx_rates'表中沒有GBP的條目(GBP的rate_to_gbp = 1)呢? 'transactions'記錄有一個空字符串作爲他們的貨幣,這個記錄是英鎊。這種加入方法會忽略這些記錄嗎? – harryg

+0

是的,查詢應該按照書面的方式工作。給它一個去,讓我們知道如果有是錯誤的 – Chance

+0

實際上在再次查看之後,我認爲在iif語句中需要第二個條件,這樣即使currency是一個空字符串,它也需要transactions.amount,您可以爲其他字符串添加更多條件,基本上是指「英鎊」。祝你好運。 – Chance