在ssis中使用派生列连接列

Djb*_*ril 7 ssis

我想要实现的是Column 5:

Column 1 Columns 2 Column 3 Column 4  Column 5
A        B                  D         A|B|D
Run Code Online (Sandbox Code Playgroud)

我使用了派生列:

(DT_STR,50,1252)([A] + "|" + [B] + "|" + [C] + "|" + [D])
Run Code Online (Sandbox Code Playgroud)

但我结束了:

Column 1 Columns 2 Column 3 Column 4  Column 5
A        B                  D         A|B||D
Run Code Online (Sandbox Code Playgroud)

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

bil*_*nkc 8

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

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

(DT_STR,50,1252)REPLACE(([Column 1] + "|" + [Column 2] + "|" + [Column 3] + "|" + [Column 4]),"||","|")
Run Code Online (Sandbox Code Playgroud)

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

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

给出以下样本数据

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];
Run Code Online (Sandbox Code Playgroud)

生成以下结果

在此输入图像描述

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


shr*_*t18 5

这应该可以解决问题:

(DT_STR,50,1252)((Column1 == "" ? "" : Column1 + "|") + (Column2 == "" ? "" : Column2 + "|") + (Column3 == "" ? "" : Column3 + "|") + (Column4 == "" ? "" : Column4))
Run Code Online (Sandbox Code Playgroud)

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