2013-04-01 38 views
3

我有一個固定的寬度平面文件和需要被加載到多個Oracle表(一個行需要被分成多個行)拆分固定寬度的一行到多個行中SSIS

這些都對頂部的數字每列的大小是 ,我的理想輸出應該如下所示。

Flatfile data(fixed width): 
3 6 3 11   3 10  3 10  3 
ID NAME AGE CTY1  ST1 CTY2  ST2 CTY3  ST3 
200JOHN 46 LOSANGELES CA HOUSTON TX CHARLOTTE NC 
201TIMBER54 PHOENIX AZ    CHICAGO IL 
202DAVID 32 ATLANTA GA PORTLAND AZ 

的發生可能會有所不同。它可以增長高達20-30

DESIRED OUTPUT: 
TABLE1 
ID NAME AGE 
200JOHN 46 
201TIMBER54 
202DAVID 32 


TABLE2 
ID SEQ CTY  ST 
200 1 LOSANGELES CA 
200 2 HOUSTON TX 
200 3 CHARLOTTE NC 
201 1 PHOENIX AZ  
201 2 CHICAGO IL   
202 1 ATLANTA GA 
202 2 PORTLAND AZ 

有人能幫助我嗎?

謝謝!

+0

你能幫我明白你的意思是「的出現可能會有所不同..它可以長到20-30?「 – billinkc

+0

雖然一般來說,你要做的是UNPIVOT你的數據。 – billinkc

+0

感謝您的回覆......此處提到的示例數據具有up to cty3 nas st3,但數據可能以cty18 st18或cty20 st20結尾 –

回答

1

我會先聽@bilinkc給出的建議,並嘗試用unpivot解決此問題。

Click here瞭解有關如何使用SSIS Unpivot數據流轉換的詳細信息。但是,如果由於某種原因無法解決問題,而且您真的想用SSIS解決這個問題,我很高興地說,使用SSIS和一個數據流來解決問題在技術上是可行的。

下面是步驟的簡表:

1)添加一個數據流任務到你的包

2)添加一個平面文件源到您的數據流任務

3)配置爲您的平面文件

4連接管理器平面文件源)組播數據流轉換添加到您的數據流任務

5)與多播數據流轉換



現在的「樂趣」的一部分連接您的平面文件源(複製和粘貼可以在這裏爲您節省時間)...

6)加入30條件分割後的數據流轉換到您的數據流任務

7)的組播數據流轉換連接到每個條件性拆分數據流

8)配置各條件性拆分N到拉行子集,其中國家爲N的d市N具有值

實施例:條件性拆分1

輸出名稱:CTY1_ST1

條件:[CTY1] = 「」 & & [ST1]!=「」

9)添加30個派生列數據流轉換到數據流

10)連接每一個以在30個條件拆分

11)配置每個具有派生列名稱SEQ以及值1到30

12)添加一臺Union所有數據流變換和聯盟的數據管道的全部30回到一起



現在的「易」的一部分......

13)新增第一個排序轉換到您的數據流任務

14)第31組播管道連接到你的第一個排序轉換

15)把一個旁邊的選中標記和排序ID(希望ID:NAME和ID:AGE爲1:1)

16)檢查重複的排序中刪除行的值

17)添加你的第二個組播數據流轉換

18)第二排序轉換到您的數據流任務

19)連接您的聯盟全部添加到您的第二個排序轉換和排序ID

20)添加合併加入到您的數據流任務

21)連接你的第二個組播數據流轉換爲左輸入

22)你的第二個排序轉換連接到您的合併加入爲你的右輸入

23)配置的合併加入作爲聯接類型=內部聯接和選擇列ID,SEQ,CTY,ST

24)的第一OLE DB目標添加到你的數據流並連接合並聯接到它(結果爲表2)

25)添加第二個OLE DB目標將數據流和你的第二個組播數據流轉換連接到它(結果是表1)