2012-05-10 59 views
1

我在表中的三列如何從一列處理多幣種(Precision和Scale),在SQL查詢

TransactionDate---DateTime 
TotalAmount---DECIMAL(18,4) 
CurrencyCode---nVarchar(10) 

TotalAmount-------------CurrencyCode 
1000.5000----------------KD (Kuwaiti Dinnar) which must be 1000.500 
5500.2000----------------ETB (Eithopian Birr) 
2500.1500----------------USD (United States Dollars) which must be 2500.15 

我在一列中存儲這些多幣種......現在我想要通過在SQL Query中使用SUM()函數來獲取每天或每月的報告.............但SUM必須根據每種貨幣的精度或比例來完成。 即....如果貨幣是美元,那麼

SUM(2500.15) 

如果貨幣是Kd,則

SUM(1000.500) 

和ETB如果然後

SUM(5500.2000) 

一些這樣的事..

+0

不太清楚「SUM必須根據每種貨幣的準確性或規模來完成」的含義,您是否可以擴展您的示例? – AakashM

回答

0

這不能通過使用一列來實現,您應該使用三列 對於每個貨幣總和並且相應地設置其精確度

Select SUM(2500.15) as USD, SUM(1000.500) as KD, SUM(5500.2000) as ETB 
1

您應該將每種貨幣以最小可能的單位存儲爲整數。

舉例來說,如果你存儲USD,您應該值存儲爲「便士的數量」,而不是與精度美元的十進制數2. $ 1.00會100

當你做你的「 SUM「,您可能需要按照貨幣進行分組才能找到合理的結果。您的客戶端軟件需要知道如何正確顯示每種貨幣,但不要干擾數據在數據庫中的存儲方式。

0

根據您的問題(含糊不清),您正試圖將貨幣兌換爲您的貨幣類型?

我認爲這是你可能是什麼什麼的示例數據是這樣的:

TransactionDate TotalAmount CurrencyCode 
2012-06-01  12   KD 
2012-06-01  25   KD 
2012-06-01  55   ETB 
2012-06-01  6   ETB 
2012-06-01  13   USD 
2012-06-01  10   USD 

什麼邏輯,你所要完成的是前。如果貨幣代碼= Kd,則總和(總金額)*轉換率(假設是什麼,你所列出的數字是)

查詢:

Select 
    sum(
    case when [CurrencyCode] = 'KD' then [TotalAmount]*1000.500 
     when [CurrencyCode] = 'ETB' then [TotalAmount]*5500.2000 
     when [CurrencyCode] = 'USD' then [TotalAmount]*2500.1500 
     else 0 end) as [TotalCalcAmount] 
From [SomeTable] 
--Where [TransactionDate] between '2012-06-01' and '2012-06-30' --Commented out for test purposes 

SQLFiddle一起去解釋:http://sqlfiddle.com/#!3/ade6e/3

0
SELECT CurrencyCode, SUM(TotalAmount) 
FROM dbo.your_table 
GROUP BY CurrencyCode