sql - 在SSIS中将固定宽度的行拆分为多行

标签 sql oracle ssis

我有一个固定宽度的平面文件,需要加载到多个oracle表中(一行需要分成多行)

每列顶部的数字是它们的大小, 我想要的输出应该如下所示。

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

有人可以帮我吗?

谢谢!

最佳答案

我会首先听取@bilinkc 给出的建议,并尝试通过 unpivot 解决这个问题。

Click here了解有关如何使用 SSIS Unpivot 数据流转换的详细信息。

但是,如果由于某种原因这不起作用,并且您确实想使用 SSIS 解决这个问题,我(有点)很高兴地说,使用 SSIS 和一个数据流解决该问题在技术上是可行的。

以下是步骤的缩写列表:

1) 将数据流任务添加到您的包中

2) 将平面文件源添加到数据流任务

3) 使用连接管理器为平面文件配置平面文件源

4) 将多播数据流转换添加到您的数据流任务

5) 将平面文件源与多播数据流转换连接



现在是“有趣”的部分(复制和粘贴可以节省您的时间)...

6) 将 30 个条件拆分数据流转换添加到您的数据流任务

7) 将多播数据流转换连接到每个条件拆分数据流

8) 配置每个条件拆分 N 以提取其中 State N 和 City N 具有值的行子集

示例:条件拆分 1

输出名称:CTY1_ST1

条件:[CTY1] != ""&& [ST1] != ""

9) 将 30 个派生列数据流转换添加到您的数据流

10) 将每一个连接到您的 30 个条件拆分

11) 为每个配置派生列名称 SEQ 和值 1 到 30

12) 添加 Union All 数据流转换并将 30 个数据管道重新合并在一起



现在是“简单”部分......

13) 将您的第一个排序转换添加到数据流任务中

14) 将第 31 个多播管道连接到您的第一个排序转换

15) 在旁边打勾并按 ID 排序(希望 ID:NAME 和 ID:AGE 为 1:1)

16) 检查删除具有重复排序值的行

17) 添加第二个组播数据流转换

18) 将第二个排序转换添加到您的数据流任务

19) 将您的 Union All 连接到第二个排序转换并按 ID 排序

20) 将合并联接添加到您的数据流任务

21) 将第二个多播数据流转换连接为左输入

22) 将第二个排序转换连接到合并连接作为正确输入

23) 将合并联接配置为联接类型 = 内部联接并选择列 ID、SEQ、CTY、ST

24) 将您的第一个 OLE DB 目标添加到数据流中并将合并联接连接到它(结果为表 2)

25) 将第二个 OLE DB 目标添加到数据流并将第二个多播数据流转换连接到它(结果为表 1)

关于sql - 在SSIS中将固定宽度的行拆分为多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736108/

相关文章:

java - SQL - 在 DAO 中执行时列名无效

jdbc - 是否可以通过 SSIS 建立 JDBC 连接?

sql-server - 包部分控制流程中的动态连接

sql - 并行性不会带来任何性能提升

testing - 用于测试批量数据的 SSIS

java - JUnit,如何测试截断表

sql - 索引 View 似乎不等同于 Oracle 物化

mysql - 如何检索没有评论?

c# - SQL查找组Column A和Column where Count in C的重复项

mysql - 谁能推荐一个原生支持多个数据库的良好数据建模工具/数据建模器?