SSIS根据给定的数据将两组列合并为一组

时间:2019-01-15 12:28:36

标签: ssis

我有以下 一个 数据集,为便于阅读未提及其他列,

Address1_PostCode         Address2_PostCode         
Address1_Line1            Address2_Line1        
Address1_Line2            Address2_Line2         
Address1_Country          Address2_Country     

所需的输出是

Address2_PostCode         
Address2_Line1                    
Address2_Line2                     
Address2_Country 

这就是我想要做的,

  • 如果Address1字段中的任何一个有数据,则覆盖Address2字段,例如如果地址1仅包含邮政编码,地址2仅包含国家/地区,则最终结果将仅包含邮政编码,国家/地区将为空或为空

  • 如果Address1的所有字段为空,则什么也不做

我已经自己搜索过,可以看到有诸如replace列之类的功能可以添加新功能和replacenull函数,但是我对它们的理解不足以实现我的目标

2 个答案:

答案 0 :(得分:2)

添加具有 new column 表达式的 Derived Column 转换,该表达式具有布尔结果,该布尔结果将检查所有Address1字段是否为空/空。

enter image description here

添加另一个 派生列转换,然后转换一次(除非您要在每列上重复验证表达式),以检查该布尔结果并从中重新分配适当的字段您需要在每个字段上输入Address1或Address2。

enter image description here

在最后一步,您可以将新列添加到流中或覆盖现有的列,只需确保您正在使用被检查的列即可。

答案 1 :(得分:1)

我建议您使用备用数据模型,以使您的原始数据保持完整。

  1. 添加多播(这将允许数据重复)
  2. 只有一个流程处理正常的非地址流程
  3. 添加新流程以处理人员地址数据。
  4. 添加脚本任务(这将用于规范地址
  5. 将密钥标记为输入,并将所有地址列标记为输入
  6. 使用PersonKey,AddressType,AddressLine1,AddressLine2,PostalCode,Country创建新的输出(称为地址)
  7. 添加此简单代码。

    AddressOutputBuffer.AddRow();
    AddressOutputBuffer.PersonKey = Row.PersonKey;
    AddressOutputBuffer.AddressType = "Address1";
    AddressOutputBuffer.AddressLine1 = Row.Address1_Line1;
    ... (Add the rest in here)
    
    AddressOutputBuffer.AddRow();
    AddressOutputBuffer.PersonKey = Row.PersonKey;
    AddressOutputBuffer.AddressType = "Address2";
    AddressOutputBuffer.AddressLine1 = Row.Address2_Line1;
    ... (Add the rest in here)
    
  8. 将此新的“人员地址”信息写入到新表中(您可以为编写的查询构建所需的逻辑,也可以创建视图以处理特定的逻辑。)

注意:您可能需要对上面的代码进行空处理 例如:

AddressOutputBuffer.AddressLine1 = !Row.Address1_Line1_IsNull?Row.Address1_Line1:"";