あなたができることは次のとおりです。
- データベースからデータ テーブルにデータを取得する
- 結果からレートと合計の 2 行を選択します
- (表示する必要がない場合は、これらの行を表から削除してください)
- 2 つの行の値に基づいて計算を行います
- 結果のためにテーブルに手動で新しい行を追加します
EDIT
多分私はあなたのデータ構造を完全に理解していませんでした. それでは、いくつかのシナリオを見てみましょう。あなたのものがそこにない場合は、データ テーブルの 1 つの行が実際にどのように見えるかについて、詳細を提供してください。
ケース a : データは列内に保存され、その行内にも合計列と金額列が必要です
Value1 Value2 Value3 Rate Total Amount
1 5 3 10 ? ?
次のように SQL ステートメントを調整できます。
SELECT Value1, Value2, Value3, Rate,
(Value1+Value2+Value3) AS Total,
((Value1+Value2+Value3) * Rate) AS Amount
FROM <table>
または、C# で型指定されたデータセットを使用している場合は、通常のSELECT * ...
ステートメントを使用して、それぞれの式 (Expression
プロパティ - 計算列に相当) を持つ列を手動で型指定されたデータセットのテーブルに追加できます。
ケース b : データは行内に格納され、合計と金額も行にしたい
RowTitle Value
Value1 1
Value2 5
Value3 2
Rate 10
RowTitle
ここで、C# で for ループを使用してすべての行を反復処理し、値を合計してから、 "Total" と "Amount" で2 つの新しい行を作成し、それらをテーブルに追加する必要があります。
EDIT 2
あなたの 2 番目のコメントから、実際にはデータベースに 2 つのテーブルがあることがわかります。1 つは実際のデータを含み、もう 1 つは料金を含みます。ユーザー定義の設定に従ってこれらのテーブルから選択すると、実際には C# のデータ セットに 2 つのテーブルが表示されます。1 つはそのデータ用で、もう 1 つはレート用です。
私の知る限り、SQL Server Compact Edition では を使用できませんJOIN
が、それが最も簡単でした。データ テーブルからデータを選択し、それを「Rates」テーブルに結合して、ユーザー設定に従ってそれぞれのレートを選択します。次に、上記の「ケース a」でメモした計算を行うことができます。
ただし、 は使用できないと思うJOIN
ので、アプリケーションにデータを取得することをお勧めします (結果として、データ用とレート用の 2 つの別個のテーブルが作成されます)。デフォルト値を持つ追加の列を取得するように、データSELECT
ステートメントを変更します。Amount
0
SELECT *, 0 AS Amount FROM <data table>
次に、C# で、データ テーブル内のすべてのレコードを反復処理し、レコードの値を計算しますAmount
。
private void GetData(...)
{
// Call SELECT statements to fill a dataset with two tables
DataSet set = new DataSet();
....
// set now contains tables[0] (for the data) and tables[1] (for the Rate).
// Get the Rate
int rate = (int)set.Tables[1].Rows[0]["Rate"]; // Assuming that the column is named "Rate"
// Now iterate over all data rows and calculate amount
foreach (DataRow row in set.Tables[0])
{
row["Amount"] = ((int)row["Total"] * rate);
}
// Mark the data set as unmodified
set.AcceptChanges();
}
このコードには調整が必要な場合があることに注意してください。実際にはテストしていません。"Rates" テーブルに複数の行が含まれており、他の設定に応じて正しいレートを選択する必要がある場合は、これらの設定に応じて正しい行を返す関数を作成することを検討してください。
private DataRow FindRateRow(DataSet set, <parameters for selecting the correct row>)
{
DataRow[] row = set.Tables[1].Select(<Filter string according to parameters>);
if (row != null && row.Length > 0)
return row[0];
return null;
}
上で使用int rate = (int)FindRateRow(set, ...)["Rate"];
します。