1

我需要转置一些连接在数据流中的一列中的字符串,但我找不到合适的解决方案。

我有数百万行是这样的:

Col1    Col2    Col3
1   MyVal1  String1
1   MyVal1  String2
2   MyVal2  String2
2   MyVal2  String1
2   MyVal2  String3
3   MyVal3  String3
3   MyVal3  String4

我需要像这样转置这些行:

Col1    Col2    Description
1   MyVal1  String1,String2
2   MyVal2  String2,String1,String3
3   MyVal3  String3,String4

我尝试了枢轴转换,但它似乎不适合这个问题。

请问我该怎么做?

谢谢您的帮助。

4

3 回答 3

1

如果源是 SQL 表,您可以使用类似的查询来执行此操作:

Select Col1,Col2,  
        STUFF((SELECT ', ' + Col3
                   FROM Table1 AS T3 
                   WHERE T3.Col1 = Table1.Col1 
                   FOR XML PATH('')), 1, 2, '')
FROM Table1
GROUP BY Col1,Col2

在 中OLEDB Source,选择源类型为SQL Command并编写以下命令。

注意:如果数据没有存储在 SQL 中,您可以将其存储在临时表中并执行此查询。否则,您必须在脚本组件转换中编写自己的逻辑。

于 2018-02-26T17:07:09.643 回答
0

如果您需要在数据流中执行此操作,您可以使用脚本转换来执行此操作。只需按第 1 列和第 2 列对数据进行预排序,然后继续附加到第 3 列的字符串变量,直到 1 或 2 的值发生变化。

于 2018-02-26T15:45:01.500 回答
0

您也可以尝试 string_agg 函数。

select
b.col1
, b.col2
, string_agg(b.col3,', ')
from(
select a.col1,a.col2,a.col3
from table as a
) as b
group by a.col1,a.col2
于 2019-11-25T16:50:19.310 回答