2014-01-09 245 views
0

好吧,我需要一些幫助解決我面臨的問題。 我正在處理一個數據庫項目,並遇到了將貨幣值從各種不同貨幣轉換爲美元的問題。MS Access查詢將數值從一種貨幣轉換爲另一種貨幣

我之所以會遇到困難,是因爲我需要保留原始貨幣格式的原始記錄,但我也必須能夠將這些值轉換爲美元,然後執行一些動態查詢來總結然後將最終結果輸出到一系列報告中。

我已經有一張表,其中包含我所有的交易(其中包括貨幣類型字段和幾個貨幣值字段(每個記錄12個字段)) 我有第二張表,其中包含貨幣類型的參考列表根據它們與美元的關係,在12個月的時間內有必要的轉換率(所以還有12個數字字段)。 (即美元進入後面會有12個字段,其中1對1的匯率爲1)

我希望能夠運行一個查詢,從我的賬戶複製記錄交易表格轉換爲新的表格後,將它們全部轉換爲美元等值價值。但是,我不是撰寫這樣的查詢的專家,並且希望得到一些幫助。是否有可能在查詢中寫入where子句到表達式中,以便它從事務中獲取每條記錄,爲正確的月份找到正確的轉換率,計算數學結果並將其輸出到另一個具有修改值的相同記錄的表?

或者有沒有辦法使用VBA腳本執行相同的功能?如果有的話,你會爲該代碼做出什麼樣的建議?

更新進展/解決方案 所以在審查解決方案和評論這裏是我想出的解決方案。 我以我預期的CurrencyName格式建立了我的匯率表(ExRates),隨後是12個月中每個月的轉換率(這是因爲必須與現有數據庫元素一起工作)

建立了以下2個查詢匹配&轉換

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的這個答案歸功於他,因爲他的回答讓我接觸到幫助我達成解決方案的實驗路線。

再次感謝您的全力幫助

+1

我不願意建議一系列嵌入[IIF](http://office.microsoft.com/en-us/access-help/iif-function-HA001228853.aspx)聲明。你應該可以通過JOIN來完成這個任務。您可能應該更多地將轉換表標準化 - 將每個月放在自己的行上,以便更輕鬆地進行連接。 – JDB

+0

我試圖避免過度正常化我的數據(已經有這個問題),我可以規範化交換到一個單獨的表。你會如何推薦我構造這樣的桌子? –

+0

第三種正常形式是* not * **超過** - 正常化。正常形式是爲了解決常見問題而創建的,幾十年的使用已經證明*它的工作非常出色。 – JDB

回答

3

您的餐桌布置是否設置在石頭上?要做到這一點最簡單的方法是設置您的貨幣表3個字段:

  • CurrencyDate - 新的匯率
  • CurrencyName的日期 - 貨幣的名稱(日元,英鎊,弗蘭克,等等...)
  • CurrencyRate - 在這一天

然後你就建立了一個名爲qryCurrentExchange查詢,你會採取MAX(CurrencyDate)每種貨幣的匯率。這將爲您提供一個查詢,其中包含每種貨幣的當前技術匯率。

使用您的交易表創建另一個查詢,Inner通過CurrencyName加入上述查詢,並且您應該能夠提取匯率,您可以在交易表中乘以您的貨幣字段。如果要將結果輸出到表中,您可以按原樣保留該查詢,也可以將其轉換爲Make Table查詢。

+0

不幸的是,我喜歡你的想法,我認爲它不會滿足我必須滿足的業務需求。 現在表中有以下字段:CurrencyName,Mth1Rate,Mth2Rate,...到M​​th12Rate 之所以這樣,是因爲它必須保留並可能重新應用歷史記錄中指定的轉換率。此表格還用作多個表格的查閱參考,以創建人員選擇正確貨幣的下拉菜單。 –

+0

如果需要對齊您的建議,我可以合理地將轉換率分成不同的表格,但您將如何構建該查詢? –

+2

我得回到我的日常工作(總是討厭撲滅你沒有點燃的火焰......),但我的表格結構是可擴展和合乎邏輯的。我一直在做這些東西多年。您可以輕鬆過濾您所需的內容,並將該過濾器應用於任何情況。當它坐下時,聽起來你每年都需要一張新桌子?那一個人應該告訴你這是錯的。我會嘗試稍後再回來看看我是否可以幫助查詢。 –