2010-05-19 7 views
1

하나의 데이터 세트로 결합하고자하는 데이터 세트가 여러 개 있습니다. 각 행에 연결할 수있는 공통 ID 필드가 있습니다. 데이터 집합에서 Merge를 호출하면 데이터 집합에 행이 추가되지만 추가 열을 결합하고 싶습니다. 한 쿼리에서이 작업을 수행 할 수있는 필드가 너무 많아서 관리하기 어렵게 만듭니다. 각 개별 쿼리는 데이터가 올바른 행에 배치되도록 순서를 처리 할 수 ​​있습니다.하나의 데이터 세트에 여러 개의 데이터 세트 열 결합

SELECT ID, colA, colB 
SELECT colC, colD 

결과 데이터 셋이 작업을 수행하는 방법에

ID colA colB colC colD 
1 a b c d 
2 e f g h 

처럼 어떤 아이디어를 보일 것이다 : 예를 들어

내가 두 데이터 세트의 결과로 두 개의 쿼리가 있다고 할 수 있습니다?

+0

이렇게하면 도움이 될 수 있습니다. http://stackoverflow.com/questions/1259788/join-between-two-tables-with-linq-to-datasets –

답변

1

다음은 ASP.NET 및 VB.NET을 사용하여 원하는 것을 성취하는 방법의 예입니다. 내가 당신을 위해 "MergeColumns"와 "MergeData"하위를 만들었습니다.

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     'Create the dataset and put in the data. Normally you will just get this from a database query' 

     Dim ds1 As New Data.DataSet 
     Dim ds2 As New Data.DataSet 

     Dim dt1 = ds1.Tables.Add() 
     dt1.Columns.Add("ID", GetType(Int32)) 
     dt1.Columns.Add("ColA", GetType(String)) 
     dt1.Columns.Add("ColB", GetType(String)) 

     Dim dt2 = ds2.Tables.Add() 
     dt2.Columns.Add("ColC", GetType(String)) 
     dt2.Columns.Add("ColD", GetType(String)) 

     dt1.Rows.Add(1, "a", "b") 
     dt2.Rows.Add("c", "d") 
     dt1.Rows.Add(2, "e", "f") 
     dt2.Rows.Add("g", "h") 

     'Sample data created, now to merge the results like you want' 
     Dim dsNew As New Data.DataSet 
     Dim dtNew = dsNew.Tables.Add(0) 

     MergeColumns(dtNew, dt1, dt2) 
     MergeData(dtNew, dt1, dt2) 

     'Display the results' 
     dsNew.AcceptChanges() 
     Response.Write(dsNew.GetXml) 

    End Sub 


    Private Sub MergeColumns(ByVal TargetTable As Data.DataTable, ByVal ParamArray SourceTables() As Data.DataTable) 
     For Each dtSource In SourceTables 
      'Make a clone of the table, then steal the columns from the clone' 
      Dim dtClone = dtSource.Clone 

      While dtClone.Columns.Count > 0 
       Dim dc = dtClone.Columns(0) 

       dtClone.Columns.Remove(dc) 

       TargetTable.Columns.Add(dc) 
      End While 
     Next 
    End Sub 


    Private Sub MergeData(ByVal TargetTable As Data.DataTable, ByVal ParamArray SourceTables() As Data.DataTable) 
     'Determine the number of rows the final table will have' 
     Dim nMaxRowCount = 0 
     For Each dt In SourceTables 
      If dt.Rows.Count > nMaxRowCount Then 
       nMaxRowCount = dt.Rows.Count 
      End If 
     Next 

     For i = 0 To nMaxRowCount - 1 
      'Create a new row using column data from each table. Assumes the name is unique across tables.' 
      Dim drTarget = TargetTable.NewRow 
      For Each dcTarget As Data.DataColumn In TargetTable.Columns 
       For Each dt In SourceTables 
        If i < dt.Rows.Count AndAlso dt.Columns.Contains(dcTarget.ColumnName) Then 
         drTarget(dcTarget) = dt.Rows(i)(dcTarget.ColumnName) 
        End If 
       Next 
      Next 
      TargetTable.Rows.Add(drTarget) 
     Next 

    End Sub 
관련 문제