gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:29:38 29 4
gpt4 key购买 nike

我有一个固定宽度的平面文件,需要加载到多个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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com