2012-05-10 1 views
1

私は、私は今......私は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 

テーブル内の3つの列を持っていますSQLクエリでSUM()関数を使用して毎日または毎月のレポートを取得したいのですが... SUMは各通貨の精度またはスケールに基づいて実行する必要があります。 すなわち....このような通貨は、その後

SUM(2500.15) 

USDであれば通貨はKDその後、

SUM(1000.500) 

で、ETBもしあれば、

SUM(5500.2000) 

いくつかのこと...

+0

「各通貨のパーシッションまたは規模に基づいてSUMを実行する必要がある」ということを明確にしていないということは、 – AakashM

答えて

0

これは1つの列を使用して達成することはできません.3つの列を使用する必要があります 各通貨の合計について、その精度をそれに応じて設定する。

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

おそらく各通貨を可能な限り小さな単位で整数として保存するだけです。あなたがUSDを保存している場合

は、たとえば、あなたが「ペニーの数」の代わりに精度ドルの10進数として値を格納する必要があります。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 

そして、何ロジックあなたが達成しようとしている元です。 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

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