1

テーブルに3つの列があります

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

これらの複数通貨を1つの列に格納しています......SQLクエリのSUM()関数を使用して日または月ごとのレポートを取得したい.............しかしSUM各通貨の精度またはスケールに基づいて実行する必要があります。すなわち....通貨が米ドルの場合

SUM(2500.15)

通貨がKDの場合

SUM(1000.500)

ETBの場合は

SUM(5500.2000)

このようなもの..

4

4 に答える 4

1

おそらく、各通貨を可能な限り最小の単位で整数として保存する必要があります。

たとえば、USD を保存する場合は、値を精度 2 の 10 進数ではなく「ペニーの数」として保存する必要があります。$1.00 は 100 になります。

「SUM」を実行するときは、結果を意味のあるものにするために、おそらく「通貨ごとにグループ化」する必要があります。クライアント ソフトウェアは、各通貨を適切に表示する方法を知っている必要がありますが、データがデータベースに保存される方法に干渉しないようにしてください。

于 2012-05-10T10:27:46.177 に答える
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の場合、sum(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

于 2012-07-11T17:36:29.257 に答える
0
SELECT CurrencyCode, SUM(TotalAmount)
FROM dbo.your_table
GROUP BY CurrencyCode
于 2012-11-11T10:46:22.937 に答える
0

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

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