【问题标题】:Concatenate columns using derived column in ssis使用 ssis 中的派生列连接列
【发布时间】:2013-12-15 17:52:15
【问题描述】:

我想要实现的是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

我正在努力寻找正确的解决方案。

【问题讨论】:

    标签: ssis


    【解决方案1】:

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

    如果您知道一行中只有一个空列,则以下表达式将更正它。它只是在结果字符串中添加一个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];
    

    生成了以下结果

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

    【讨论】:

    • 你好匿名 DownVoter (@TheOptimusPrimus) 如果您可以提供指导,说明是什么让这个答案没有用,而不是小规模的连续投票,请发表评论。
    【解决方案2】:

    这应该可以解决问题:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多