2016-05-18 6 views
0

私のプログラムのこのモジュールの部分であなたの助けが必要です。 i "は、コード値" 2つのテーブル、を有する"コード、説明、値"テーブルBを有するTableAのを有する以下例:SQLテーブルをループして既存の値を集計する方法

テーブルA

code description value 
-----------------------------    
CD1  BOOKS  
CD2  BREADS  
CD3  PHONES 
CD4  FISH  

をテーブルB

code value1 value2 value3 value4 
-------------------------------------- 
cd1 12  21  10   21 
cd2  9  10  10   11 
cd3 19  11  29   13 
cd4 10  12  22   12 

アイデアを更新する表A TableBのTableA.code = TableB.codeの値を使用したが、値がテーブルAで自分のしているならば、TableBの古い値フィールドに新しい値を追加することによって、TableAの Valueフィールドの内容を更新します。 code = TableA.code。私は次のコードを書いていますが、それは私のコードです:

DataTable dt = GetDatafromDatabase(); //===== returns a DataTable 

string SQLT = "SELECT * FROM tbl_TempReport"; 

if (cn.State == ConnectionState.Closed) {cn.Open(); } 
SqlCommand cmdT = new SqlCommand(SQLT, cn); 
while (rt.Read()) 
{ 
// For each row, print the values of each column. 
foreach (DataColumn column in dt.Columns) 
{ 
foreach (DataRow row in dt.Rows) 
{ 
colname = column.ColumnName.ToString(); 
string m_Code = rt["code"].ToString(); 
if (m_Code == colname) { 
if (m_Code == colname && mValue > 0) { mValue +=   Convert.ToInt32(row[column].ToString()); } else { mValue = Convert.ToInt32(row[column].ToString()); } 
//============ insert into tbl_TempReport to match the appropriate column 

string SQLP = "UPDATE tbl_TempReport SET VALUEP = @VALUEP WHERE code =  @code"; 
SqlCommand cmdp = new SqlCommand(SQLP, cn); 
cmdp.Parameters.AddWithValue("@VALUEP", SqlDbType.Int).Value = mValue; 
cmdp.Parameters.AddWithValue("@code", SqlDbType.NVarChar).Value =  rt["code"].ToString(); 
cmdp.ExecuteNonQuery(); 
} 
} 
} 
} 

私はこれを達成するためにあなたの助けが必要です。あなた

答えて

0

をありがとう、私は質問を理解していれば、これは任意のループせずに、単一のUPDATE文で行うことができます

UPDATE a 
SET value = b.value1 + b.value2 + b.value3 + b.value4 + COALESCE(value, 0) 
FROM TableA a 
INNER JOIN TableB b ON(a.code = b.code) 
+0

ゾハルPeledを、支援していただきありがとうございます。問題は、私は3つの(3)列の "コード、説明、値p"と2つの(2)列 "コード、値"これらのすべてのテーブルが2000レコードを持つTableBを持つ2つのテーブルを持っているということです。その考え方は、TableAのコード一致コードの検索TableBです。TableAのValuepをTableBの値で更新しますが、TableAに既にValuep列のデータがある場合は、現在のデータに合計します。すべての2000年の記録についてそれを繰り返す。私がやったことは2つのレコードにしか影響しません。助けてください – Abraham1973

+0

私の編集した答えを参照してください。 –

関連する問題