2016-05-05 9 views
0

3つの定義済み型の列とその列に数値が含まれているデータベースがあります。 タイプはデータベース内で別々の時刻に表示されることがあります。 各タイプを1回だけ表示し、そのタイプに関連する数値に合計するDataTableを作成したいとします。AccessからDataTableへのデータを集計します

  List<String> types = typesInTable(table); 
      DataTable t = new DataTable(); 
      t.Clear(); 
      t.Columns.Add("Type"); 
      t.Columns.Add("Total Expenses"); 

      foreach (String type in types) 
      { 
       DataRow tmp = t.NewRow(); 
       tmp["Type"] = type; 
       int total = 0; 
       myConnection.Open(); 
       OleDbDataReader reader = null; 
       OleDbCommand cmd = new OleDbCommand("SELECT [Type] , [Expense] FROM [" + table+"]", myConnection); 
       reader = cmd.ExecuteReader(); 
       while (reader.Read()) 
       { 
        if(reader["Type"].ToString().Equals(type)) 
        { 
         total += Convert.ToInt32(reader["Expense"].ToString()); 
        } 
       } 

       tmp["Total Expenses"] = total; 
       if (!t.Rows.Contains(tmp)) 
       { 
        t.Rows.Add(tmp); 
       } 
       myConnection.Close(); 
      } 

このコードは、タイプを複数回表示します。

+1

の合計とグループ化の種類が含まれていますか? –

+1

"[タイプ] =" +タイプ –

答えて

0

あなたは合計でグループ化されたすべてのタイプが含まれているデータテーブルを作成するには、このコードを使用することができます:

DataTable t = new DataTable(); 
myConnection.Open(); 
string query = string.Format("SELECT Type, Sum(Expense) AS TotalExpenses FROM [{0}] group by Type", table); 
OleDbCommand cmd = new OleDbCommand(query, myConnection); 
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 
adapter.Fill(t); 
myConnection.Close(); 

あなたは1つのDataTableの使用この中で一斉に異なるテーブルからの種類を合計する場合:

List<String> tableList = serviceMethod.getTableList(); 
DataTable dtAllType = new DataTable(); 
foreach (string table in tableList) 
{ 
    DataTable dtTemp = new DataTable(); 
    myConnection.Open(); 
    string query = string.Format("SELECT Type, Sum(Expense) AS TotalExpenses FROM [{0}] group by Type", table); 
    OleDbCommand cmd = new OleDbCommand(query, myConnection); 
    OleDbDataAdapter adapter = new OleDbDataAdapter(cmd); 
    adapter.Fill(dtTemp); 

    for (int i = 0; i < dtTemp.Rows.Count; i++) 
    { 
     bool isDupe = false; 
     for (int j = 0; j < dtAllType.Rows.Count; j++) 
     { 
      if (dtTemp.Rows[i][0].ToString() == dtAllType.Rows[j][0].ToString()) 
      { 
       dtAllType.Rows[j][1] = int.Parse(dtAllType.Rows[j][1].ToString()) + int.Parse(dtTemp.Rows[i][1].ToString()); 
       isDupe = true; 
       break; 
      } 
     } 

     if (!isDupe) 
     { 
      dtAllType.ImportRow(dtTemp.Rows[i]); 
     } 
    } 
    myConnection.Close(); 
} 

dtAllTypeDataTableはExpence

あなたはSUM関数を使用していない理由
+0

ありがとうございました["+テーブル+"]からのSELECT合計([費用])異なるテーブルの型をまとめてどうすればいいですか? –

+0

ループテーブルに応答してコードを記述することができます。 –

+0

クエリでどのように変数 'table'を取得しますか? –

関連する問題