如何将一组列作为输出中的行进行旋转

时间:2014-04-09 16:21:49

标签: ssis flat-file

我正在尝试使用布局转换文件,如下所示:

id1 | id2 | id3 |...| id34 | A | B | C | A | B | C | A | B | C | 100 group of A B C|
a1  | b1  | c1  |...| aa1  | 3 | 7 | 5 | 7 | 5 | 3 | 1 | 1 | 1 | ...               |
a2  | b2  | c2  |...| aa2  | 4 | 3 | 7 | 0 | 4 | 8 | 9 | 8 | 4 | ...               |

输出应为:

id1 | id2 | id3 |...| id34 | A | B | C |
a1  | b1  | c1  |...| aa1  | 3 | 7 | 5 |
a1  | b1  | c1  |...| aa1  | 7 | 5 | 3 |
a1  | b1  | c1  |...| aa1  | 1 | 1 | 1 |
a2  | b2  | c2  |...| aa1  | 4 | 3 | 7 |
a2  | b2  | c2  |...| aa1  | 0 | 4 | 8 |
a2  | b2  | c2  |...| aa1  | 9 | 8 | 4 |

我目前正在通过脚本转换组件来完成它 但它很慢。

我对Pivot和Unpivot组件不是很熟悉

是否有任何可以设置行组| A | B | C |的选项 和SSIS会将它视为一组并以我想要的格式转换它?

感谢提前!!

1 个答案:

答案 0 :(得分:1)

我首先加载文件"按原样#34;进入一个宽的SQL表。我会为列组编号,例如

id1 | id2 | id3 |...| id34 | A | B | C | A | B | C | A | B | C | ...| a1 | b1 | c1 |...| aa1 | 3 | 7 | 5 | 7 | 5 | 3 | 1 | 1 | 1 | ... |

...加载到列中......

id1 | id2 | id3 |...| id34 | A1 | B1 | C1 | A2 | B2 | C2 | A3 | B3 | C3 | ... a1 | b1 | c1 |...| aa1 | 3 | 7 | 5 | 7 | 5 | 3 | 1 | 1 | 1 | ... |

然后我将创建一个Variable(String)来保存动态SQL语句,由另一个Variable(Int)驱动。我将创建一个For Each循环以将Int变量从1递增到100.在循环中我将使用字符串变量来驱动数据源。

第一次迭代,SQL看起来像:

SELECT id1, id2, id3 ... id34, A1 AS A, B1 AS B, C1 AS C FROM Staging_Table

第二次迭代,SQL看起来像这样:

SELECT id1, id2, id3 ... id34, A2 AS A, B2 AS B, C2 AS C FROM Staging_Table

......等等。

每次迭代的输出将通过OLE DB目标进入目标表。