2014-03-25 36 views
1

我需要连接两个我在PowerShell中创建的表。问题是,在他们共享的5列中,每个表中有两列是不同的。我怎样才能加入这两个表格,然后才能对它们进行排序。我猜测我将有两个执行以下操作:使用PowerShell将两个与两列不同的表结合使用

实施例: table1的 色谱柱:A,B,C,d,E

table2中 列A,X,C,d,Z

我是否需要为每个空的表添加一个新列,但是要表示它从另一个表中缺少的列,以便当我执行table1 + table2时,它们不会删除任何数据?

没有SQL连接的代码的代码示例。

$Command.CommandText = "SELECT job_number, job_desc, permit_number, pieces, rate, postage_total FROM monticello_charges WHERE (insert_date >= '$from') AND (insert_date < '$to') ORDER BY job_number" 
    $Command2.CommandText = "SELECT job_number, description, permit_number, pieces, rate, total FROM mailshop_charges WHERE (mailing_date >= '$from') AND (mailing_date < '$to')ORDER BY permit_number, job_number" 

    $Reader = $Command.ExecuteReader() 
    $Reader2 = $Command2.ExecuteReader() 

    ################################### 
    #Do not add entries that have a [permit_number] of (360) and [rate] less than (0) 
    ################################### 
    $results = @() 
    while ($Reader.Read()) 
    { 
     $row = [ordered]@{}   
     for ($i = 0; $i -lt $Reader.FieldCount; $i++) 
     { 
      if($reader.GetValue(2) -eq 360 -and $reader.GetValue(4) -lt 0) 
     { 
       #pass over it 
      } 
      else 
      { 
       $row[$reader.GetName($i)] = $reader.GetValue($i) 
      }    
     } 
     $results += new-object psobject -property $row 
    } 

    ################################### 
    # Build the second table and replace 280 permits to (M) 
    ################################### 
    $results2 = @() 
    while ($Reader2.Read()) 
    {  
     $row = [ordered]@{} 
     for ($i = 0; $i -lt $Reader2.FieldCount; $i++) 
     { 
      if($i -eq 2 -and $reader2.GetValue($i) -eq 280) 
     { 
       $row[$reader2.GetName($i)] = "M" 
      #$counter++ 
      } 
      else 
      { 
       $row[$reader2.GetName($i)] = $reader2.GetValue($i) 
      }    
     } 
     $results2 += new-object psobject -property $row    
    } 


    $connection.Close(); 
    $connection2.Close(); 

    ################################### 
    #Combine the tables and sort,then inject to CSV output file. 
    ##################################  
    $finalResult = $results + $results2; 

    #$finalResult = $finalResult | sort-object @{Expression = {$_.permit_number}; Ascending = $true},{$_.job_number} 

    $finalResult | sort-object @{Expression = {$_.permit_number}; Ascending = $true},{$_.job_number} | export-csv c:\Users\cpharr\Desktop\out.csv 

    Write-Host "Report has been exported to current directoy. Filename:[out.csv]" 

在此先感谢!

+0

表格在他们共享的列中是否有相同的信息?或者你只是想把桌子合并成一张大桌子?你想重新命名字段(如'postage_total'只是'总')? – TheMadTechnician

回答

2

好吧,假设你没有条目链接,所有的记录是分开的,你可以这样做:

$T2Keys = $Results2|gm|?{$_.MemberType -match "Property"}|Select -ExpandProperty Name 
$T1Keys = $Results|gm|?{$_.MemberType -match "Property"}|Select -ExpandProperty Name 
$KeysToAdd = $T2Keys|?{$T1Keys -notcontains $_} 
$Results3 = @() 
$Results3 += $Results 
$KeysToAdd|%{$Results3|Add-Member $_ ""} 
$Results3+=$Results2 

,查询第一表的属性给一个变量。它对第二个表格也是一样。它查找第二个表中不在第一个表中的属性,并将它们保存到变量中。然后它会创建一个空数组,将第一个表添加到它,添加缺少的字段,然后将第二个表添加到它。

相关问题