1

我在表中有三列

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)

像这样的东西..

4

4 回答 4

1

您可能应该将每种货币以最小的可能单位存储为整数。

例如,如果要存储美元,则应将值存储为“便士数”,而不是精度为 2 的十进制美元数。$1.00 变为 100。

当您执行“SUM”时,您可能需要“按货币分组”以使结果有意义。您的客户端软件需要知道如何正确显示每种货币,但不要让这干扰数据在数据库中的存储方式。

于 2012-05-10T10:27:46.177 回答
0
SELECT CurrencyCode, SUM(TotalAmount)
FROM dbo.your_table
GROUP BY CurrencyCode
于 2012-11-11T10:46:22.937 回答
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 则 sum(TotalAmount)*conversion rate (假设这是您列出的数字)

询问:

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

于 2012-07-11T17:36:29.257 回答
0

这不能通过使用一列来实现,您应该为每个货币总和使用三列并相应地设置它们的精度,例如

    Select SUM(2500.15) as USD, SUM(1000.500) as KD, SUM(5500.2000) as ETB
于 2012-05-10T09:52:45.943 回答