0

私はDataTable一緒に追加された2つのテーブルを持っています。そのうちの 2 つはTotalRateです (注: これらは my の行ですDataTable)。2つの行を掛け合わせて合計金額を計算したい。どうすればいいですか?

s は SQL Compact から来ており、DataTable実行する必要のある設定によっては必ずしも必要ではないため、そこで計算を行うことはできません。パーセンテージ計算でも何でもかまいません。DataTable????の2行間で計算を行う方法はありますか?

私はC#を使用しています。計算機能を試しましたが、うまくいきません。テーブルは次のようになります。

Title Prod1  Prod2   Prod3
       10     20       30
       0      20       10
       5      6        0
       50     0        0
Total  65     46       40
Rate   10     20       10
Amount 650    920      400

Total=sum of Prodi   i=1,2,3   Amount=Total*Rate 

これを達成する方法がいくつかあるはずです。どうしよう????

前もって感謝します。

4

1 に答える 1

1

あなたができることは次のとおりです。

  1. データベースからデータ テーブルにデータを取得する
  2. 結果からレートと合計の 2 行を選択します
  3. (表示する必要がない場合は、これらの行を表から削除してください)
  4. 2 つの行の値に基づいて計算を行います
  5. 結果のためにテーブルに手動で新しい行を追加します

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ステートメントを変更します。Amount0

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"];します。

于 2010-09-03T06:50:08.080 に答える