我想要实现的是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)
我很难找到合适的解决方案.
您的问题是有一列空数据,并且您没有尝试在连接中测试或处理它.
如果您知道连续只有一个空列,则以下表达式将对其进行更正.它只是添加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.
这应该可以解决问题:
(DT_STR,50,1252)((Column1 == "" ? "" : Column1 + "|") + (Column2 == "" ? "" : Column2 + "|") + (Column3 == "" ? "" : Column3 + "|") + (Column4 == "" ? "" : Column4))
Run Code Online (Sandbox Code Playgroud)
基本上,您需要检查每列中的空值,并根据列位置与空字符串或列内容以及可选的分隔符连接。
| 归档时间: |
|
| 查看次数: |
27849 次 |
| 最近记录: |