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

2024-02-20

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

有人可以帮我吗?

Thanks!


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

点击这里 http://technet.microsoft.com/en-us/library/ms141723%28v=sql.100%29.aspx有关如何使用 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)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在SSIS中将固定宽度的行拆分为多行 的相关文章

  • 使用 Hibernate 将 Oracle 日期映射到 Java 对象

    我收到消息 文字与格式字符串不匹配 例如 以下是 Java 类中的一些方法 public String getDateTime public void setDateTime String date time 以下是该类的 Hibernat
  • 如何计算选择查询的最佳获取大小

    在 JDBC 中 默认获取大小为 10 但我想当我有一百万行时 这不是最佳获取大小 据我所知 获取大小太低会降低性能 但如果获取大小太高也会降低性能 我怎样才能找到最佳尺寸 这对数据库端有影响吗 它会占用大量内存吗 如果您的行很大 请记住
  • 如何使用 SQL 通过表示多级订单的 varchar 字段正确排序?

    我不太喜欢数据库 我发现在查询上出现以下问题SQL服务器数据库旧的遗留应用程序的 我声明不幸的是我无法更改数据库结构 字段类型 这非常难看 我有以下情况 SELECT Sottocategoria IdSottocategoria IdCa
  • 使用条件 SQL 统计每月汇总记录

    我有一张桌子 我们就叫他们桌子吧SUMMARYDATA NIP NAME DEPARTMENT STATUSIN STATUSOUT TOTALLOSTTIME A1 ARIA BB 2020 01 21 08 06 23 2020 01
  • 删除表的重复项

    In my activity logs 它包含列 material name user id mod result 这标志着测试是否通过 失败 cert links 不知何故 用户生成了两倍的条目material name与cert lin
  • 如何在 Spring Data 中选择不同的结果

    我在使用简单的 Spring Data 查询或 Query 或 QueryDSL 在 Spring Data 中构建查询时遇到问题 如何选择三列 研究 国家 登录 不同的行 并且查询结果将是用户对象类型的列表 Table User Id S
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 如何引用下一行的数据?

    我正在 PostgreSQL 9 2 中编写一个函数 对于股票价格和日期的表 我想计算每个条目较前一天的百分比变化 对于最早一天的数据 不会有前一天 因此该条目可以简单地为 Nil 我知道WITH声明可能不应该高于IF陈述 到目前为止 这就
  • 在 Mysql 上使用 EntityManager JPA 运行脚本

    我正在尝试运行脚本 sql 文件 但由于我尝试了多种方法 因此出现多个错误 这是我的主要 sql 脚本 INSERT INTO Unity VALUES 11 paq 0 2013 04 15 11 41 37 Admin Paquete
  • 自动删除主键序列中的间隙

    我正在创建一个网页 该网页根据用户操作将数据存储到 MySQL 数据库中 数据库有很多行 行的主键是列 rowID 它只是按顺序对行进行编号 例如 1 2 3 4 用户可以选择删除行 问题是当用户删除最后一行以外的行时 rowID 中有一个
  • Oracle即时客户端和Oracle客户端之间的区别

    Oracle即时客户端和Oracle客户端有什么区别 你能给我解释一下吗 谢谢 Oracle 客户端附带一个安装程序和许多可执行文件 例如 sqlplus tnsping 很完整而且很大 Oracle Instant 客户端是一个基本的轻量
  • 根据由另一列分组的不同列的最大值获取值[重复]

    这个问题在这里已经有答案了 我想根据由另一列分组的不同列的最大值来获取列的值 我有这张表 KEY NUM VAL A 1 AB B 1 CD B 2 EF C 2 GH C 3 HI D 1 JK D 3 LM 并想要这样的结果 KEY V
  • 插入具有多个值的外键

    我想知道 是否有可能创建一个表 其中我有一个接受外键但同一行可能有多个值的表 例如 Employee id name skillid Skill Skillid skillname 这里 Employee 的一个例子可以是 Employee
  • 选择多列 按一列分组 按计数排序

    我在Oracle中有以下数据集 c1 c2 c3 1A2 cat black 1G2 dog red B11 frog green 1G2 girl red 试图得到以下结果 基本上我首先尝试获取具有重复 c1 的行 c1 c2 c3 1G
  • 如何编写SSIS switch/case 表达式?

    这是一个 SQL Server Integration Services SSIS 表达式问题 我对此还很陌生 我想在派生列转换中编写一个 switch case 表达式 基本上 新列可以根据输入列的值有 5 个不同的可能值 我从谷歌得到的
  • PLSql 返回值

    我再次使用一些 PLSql 我想知道 是否有任何方法可以像选择一样使用以下函数 而不必将其转换为函数或过程 这样我就可以从包含它的脚本中看到代码 代码如下 DECLARE outpt VARCHAR2 1000 flow rI VARCHA
  • 如何在PL/SQL中模拟32位有符号整数溢出?

    您知道如何在 Oracle PL SQL 中模拟 32 位整数溢出吗 例如 2147483647 1 2147483648 or 2147483648 1 212147483647 我尝试了 PLS INTEGER 但它引发了溢出异常 我终
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 更改mysql数据库表中的日期格式

    大家早上好 只是一个简单的问题 在我现有的 MySql 数据库中 我几乎没有包含日期 的列 目前这些是年 月 日格式 但现在我需要将其全部更改为年 月 日格式 我试过了select date format curdate d m Y 但它不
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We

随机推荐