表格中有三列
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查询中使用SUM()函数来获取每天或每月的报告............ 。必须根据每种货币的精确度或比例来完成SUM。 即.....如果货币是美元那么
SUM(2500.15)
如果货币是KD那么
SUM(1000.500)
如果ETB那么
SUM(5500.2000)
这样的事情......
答案 0 :(得分:1)
您应该只将每种货币存储在可能的最小单位中,作为整数。
例如,如果您要存储美元,则应将该值存储为“便士数”,而不是精确值为2的十进制数。$ 1.00将变为100。
当您执行“SUM”时,您可能需要“按货币分组”才能使结果有意义。您的客户端软件需要知道如何正确显示每种货币,但不要让它干扰数据在数据库中的存储方式。
答案 1 :(得分:0)
使用一列无法实现,您应该使用三列 对于每种货币总和并相应地设定其精度,例如
Select SUM(2500.15) as USD, SUM(1000.500) as KD, SUM(5500.2000) as ETB
答案 2 :(得分: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
你要完成的逻辑是ex。如果CurrencyCode = KD则求和(TotalAmount)*转换率(假设您所列出的数字是)
查询:
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
答案 3 :(得分:0)
SELECT CurrencyCode, SUM(TotalAmount)
FROM dbo.your_table
GROUP BY CurrencyCode