2010-06-29 4 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"; 

나는 하나에이 두 테이블을 병합하고 싶습니다 (제가 쿼리를 실행하고 둘 다 예상 된 결과를 반환합니다. 위의 쿼리의 구문을 귀찮게하지 마십시오) 데이터 세트 (또는 그리드 뷰의 데이터 소스로 사용할 수있는 다른 모든 구조). '이름'열은 고유하고 다른 열도있을 수 있습니다. 확인할 수 있습니다. 나는 마지막 테이블 열

이름 시간 1 타임 2 분석

  • 별로 문제가되지 않는 열의 순서 주소 닮은 싶어하지만, 너무 많은 일이 아니라면, 나는 위의 순서를 선호 할 것입니다.
  • 나는 time1과 time2에 수학 연산을 수행하고 그에 따라 분석 열을 업데이트하려고합니다. C# 또는 JS에서이 작업을 수행하는 것이 좋습니다.

현재 두 테이블의 결과를 수집하기 위해 데이터 테이블을 사용하고 있습니다. Datatable.Merge 메서드를 사용해 보았습니다. 그러나 열 이름을 동일하게 지정 했음에도 불구하고 실제로 행 수 (외부 조인과 같은 종류)를 두 배로 늘립니다. (새 DataColumn ... columns.Add)

찾고 주셔서 감사합니다 :) 나는 당신의 의견을 주셔서 감사합니다.

  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'의 어떤 행에 병합되어야하는지 어떻게 알 수 있습니까? –

+0

외부 조인 동작을 피하기 위해 병합 기능으로 누락 된 스키마 동작을 설정해보십시오. – Thurein

+0

안녕 Lazy Bob, 두 쿼리의 '이름'필드는 각 행에 대해 고유하며 '시간'의 두 값에 대한 일치 기준입니다. – Freakishly

답변

1

답변은 여기에서 찾을 수 있습니다. 몇 가지 비틀기와 함께, 나는 그것이 내가 원하는 것을 정확하게 할 수있었습니다. http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/f122d7f4-3b7d-4d93-bd0f-8bb57cd990a4/

+0

이 답변은 링크 전용 답변으로 인해 제거 플래그로 지정되었습니다. 링크를 클릭해야 할 필요가없는 독자에게 유용 할 정도로 세부 정보가 포함되도록 편집 해 주실 수 있습니까? – josliber

관련 문제