2014-05-15 39 views
0

我有一個聯繫人列表及其信息來自兩個不同的數據庫,我已經執行了聯盟全部和排序。現在我有一個彙總列表,它看起來像下面這樣:自定義腳本組件SSIS過濾和合並重復項

contactid add1   add2  city  phone  fullname  source 
-----  -----   ----- ----- -----   -----  ----- 
BOOG1  1598 Tree Drive Apt:215 NYC 718-888-9989 Andrew Sample DB1 
NULL  NULL    Apt:215   718-888-9989 Andrew Sample DB2 

BOOG6  1598 Tree Drive Apt:215 NYC 718-888-8888 Andria Toefield DB1 
NULL  NULL Apt:215      718-888-9888 Andria Toefield DB2 
.... 
.... 
.... 

基本上,我想用一個腳本組件將比較行安德魯樣品,如果列空,然後選擇一個不是,如果存在衝突的數據,然後從db2中選擇要替換的數據。所以,最終的結果應該是這樣的:

contactid add1   add2  city  phone  fullname 
-----  -----   ----- ----- -----   -----   
BOOG1 1598 Tree Drive Apt:215 NYC 718-888-9989 Andrew Sample  

BOOG6 1598 Tree Drive Apt:215 NYC 718-888-9888 Andria Toefield 
.... 
.... 
.... 

我不知道如何開始在C#腳本這一點。我不知道如何選擇行,然後比較行中的某些列。

+0

您是在查詢中還是在SSIS中執行了所有聯盟? –

+0

我把所有的聯盟都作爲SSIS數據流的改造 – user3470756

+0

什麼是匹配標準,電話和名稱?這可能會變得醜陋。 –

回答

1

我不會用腳本任務嘗試這 - 實在是太難了跨行比較。

我將一個模糊分組轉換添加到組上的名稱列。這會添加一個_key_out列(等等)。我會把結果放到一個SQL表中。

然後我會寫一個複雜的SQL查詢的_key_out列設有GROUP BY和每個其他列的CASE語句來解決你的「缺失」和「相互矛盾」的要求。

一旦你指出這一點在任何規模的現實世界的數據集,這種設計的好處纔會真正還清。您無疑會遇到更復雜的場景,例如上面的例子。 DB1有2個「John Smith」行,而DB2有3個「John Smith」行。您將能夠調整模糊分組參數和/或添加輔助模糊分組來打破關係。

沿途你可以詢問在中間SQL表中的結果,以優化對這些問題的處理方式。

+0

謝謝:)肯定會嘗試一下。在附註中,我將如何在派生列操作上執行模糊分組,或者將其導入到平面文件中,然後使用它來讀取文件? – user3470756

+0

這是數據流的轉換,因此您可以從派生列轉換的下游添加它。 –

+0

不幸的是我無法這樣做 – user3470756