2010-06-29 81 views
2

好的,我的描述有點囉嗦,但忍受着我。將列添加到現有數據集的最佳方式是什麼?

我有兩個非常長的查詢,我在多個表上運行,使用INNER JOIN。這兩個查詢之間的唯一區別在於,它們從兩個單獨的DropDownLists中獲取WHERE子句中的一個的不同輸入值。這些查詢的結果是相同的,除了time1/time2列之外。

string query1 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list1.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name"; 

string query2 = "select Name = t1.name, time1=(SELECT hours FROM table3 WHERE street=list2.selectedvalue), t2.address from [table1] t1 INNER JOIN [table2] t2 ON t1.param = t2.param ORDER BY Name"; 

(請不要與上面的查詢語法麻煩,我已經執行的查詢,他們都返回預期的結果。)

我想這兩個表合併成一個單一的數據集(或任何其他可用作gridview數據源的結構)。 「名稱」列是獨一無二的,其他一些可能也是如此,我可以查看。我想最後的表列類似

名稱時間1時間2分析地址

  • 列的順序並不重要,非常多,但如果它沒有太多的工作,我寧願上面的順序。
  • 我想對time1和time2進行數學運算,並相應地更新分析列。我最好在C#或JS做這個嗎?

當前,我正在使用數據表來收集兩個查詢的結果。我嘗試使用Datatable.Merge方法,但實際上使行數增加了一倍(類似於外連接),儘管命名列相同(在列中.Add(新DataColumn ...)

感謝您的期待:)我感謝您的意見。

  Datatable dt1 = new datatable; 
      Datatable dt2 = new datatable; 

      dt1.Columns.Add(new DataColumn("name", typeof(string))); 
      dt1.Columns.Add(new DataColumn("time1", typeof(int))); 
      dt1.Columns.Add(new DataColumn("time2", typeof(int))); 
      dt1.Columns.Add(new DataColumn("analysis", typeof(string))); 
      dt1.Columns.Add(new DataColumn("address", typeof(string))); 

      SqlDataReader dr = cmd1.ExecuteReader(); 
      while (dr.Read()) 
      { 
       DataRow drow = new DataRow(); 
       drow["name"] = dr["name"].ToString(); 
       drow["time1"] = dr["time1"]; 
       drow["address"] = dr["CurrentTime"].ToString(); 
       dt1.Rows.Add(drow); 
      } 
      dr.Close(); 

      dr = cmd2.ExecuteReader(); 
      while (dr.Read()) 
      { 
       DataRow drow = new DataRow(); 
       drow["time2"] = dr["time1"]; 
       drow["analysis"] = "I need javascript here"; 
       dt2.Rows.Add(drow); 
      } 
      dr.Close(); 

      dt1.Merge (dt2); 
      this.GridView1.DataSource = dt1; 
      this.GridView1.DataBind; 
+1

在創建內部連接條件的表之間是否存在一些公共數據?你如何知道'str1'的哪一行應該被合併到'str2'的哪一行? – 2010-06-29 04:50:06

+0

可能是您嘗試使用合併函數設置缺少的模式操作以避免外部連接行爲。 – Thurein 2010-06-29 05:47:10

+0

Hi Lazy Bob,兩個查詢中的'name'字段對於每一行都是唯一的,並且是兩個'hours'值匹配的基礎 – Freakishly 2010-06-29 06:29:46

回答