在ssis中使用派生列连接列

时间:2013-12-15 17:52:15

标签: ssis

我想要实现的目标是Column 5

Column 1 Columns 2 Column 3 Column 4  Column 5
A        B                  D         A|B|D

我使用了派生列:

(DT_STR,50,1252)([A] + "|" + [B] + "|" + [C] + "|" + [D])

但我结束了:

Column 1 Columns 2 Column 3 Column 4  Column 5
A        B                  D         A|B||D

我很难找到合适的解决方案。

2 个答案:

答案 0 :(得分:7)

您的问题是有一列空数据,并且您没有尝试在连接中测试或处理它。

如果您知道连续只有一个空列,则以下表达式将对其进行更正。它只是对结果字符串添加REPLACE调用,以便将双管道组成一个管道。

(DT_STR,50,1252)REPLACE(([Column 1] + "|" + [Column 2] + "|" + [Column 3] + "|" + [Column 4]),"||","|")

否则,您将需要检查列是否具有值,然后才添加分隔符。这会产生如下表达式

(DT_STR,50,1252)(([Column 1] + ((LEN([Column 1]) == 0) ? "" : "|") + [Column 2] + ((LEN([Column 2]) == 0) ? "" : "|") + [Column 3] + ((LEN([Column 3]) == 0) ? "" : "|") + [Column 4]))

给出以下样本数据

SELECT
    'A' AS [Column 1]
,   'B' AS [Column 2]
,   '' AS [Column 3]
,   'D' AS [Column 4]
UNION ALL
SELECT
    'A' AS [Column 1]
,   '' AS [Column 2]
,   '' AS [Column 3]
,   'D' AS [Column 4]
UNION ALL
SELECT
    'A' AS [Column 1]
,   '' AS [Column 2]
,   '' AS [Column 3]
,   '' AS [Column 4]
UNION ALL
SELECT
    '' AS [Column 1]
,   '' AS [Column 2]
,   '' AS [Column 3]
,   'D' AS [Column 4];

生成以下结果

enter image description here

此时,我可能会跳过派生列并使用脚本组件生成连接数据。表达式的滚动是维护挑战。另外,上述脚本不会考虑NULL。

答案 1 :(得分:4)

这应该可以解决问题:

(DT_STR,50,1252)((Column1 == "" ? "" : Column1 + "|") + (Column2 == "" ? "" : Column2 + "|") + (Column3 == "" ? "" : Column3 + "|") + (Column4 == "" ? "" : Column4))

基本上,您需要检查每列中的空值,并连接空字符串或列内容,以及可选的分隔符,具体取决于列位置。

相关问题