2013-04-01 73 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)