Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于另一列筛选一列中的数据值,然后将值插入同一SQL表中的不同列_Sql Server_Ssis_Etl_Data Transform_Conditional Split - Fatal编程技术网

Sql server 基于另一列筛选一列中的数据值,然后将值插入同一SQL表中的不同列

Sql server 基于另一列筛选一列中的数据值,然后将值插入同一SQL表中的不同列,sql-server,ssis,etl,data-transform,conditional-split,Sql Server,Ssis,Etl,Data Transform,Conditional Split,这是我正在尝试使用SSI和条件拆分转换来解决的一个难题。我有一个.csv文件,它在一行中包含每个唯一用户的属性数据,在另一列中包含每个属性的值。i、 e: Attribute, Attribute Type ID, 0000000001 Birthdate, 09/02/1976 Role, Manager 或者类似的东西。我需要将属性拆分为包含属性类型数据的列。因此,预期的结果将是: ID, Birthdate, Role

这是我正在尝试使用SSI和条件拆分转换来解决的一个难题。我有一个.csv文件,它在一行中包含每个唯一用户的属性数据,在另一列中包含每个属性的值。i、 e:

Attribute, Attribute Type

ID, 0000000001

Birthdate, 09/02/1976

Role, Manager
或者类似的东西。我需要将属性拆分为包含属性类型数据的列。因此,预期的结果将是:

ID,                    Birthdate,              Role,

0000000001,             09/02/1976,            Manager,
然后我需要将它们插入一个包含新列的SQL表中

通过对一列进行条件拆分转换(例如使用表达式属性==“ID”,然后将.csv源中的整个属性列映射到SQL目标表中的ID列),我可以很好地完成这一点,但问题在于对其他列进行条件拆分转换。我似乎无法让一个联盟完成我想让它做的事情

有什么建议吗?

您可以使用脚本组件实现:
  • 添加脚本组件
  • 转到“输入和输出”选项卡
  • 添加3个输出列:ID、生日、角色
  • 将SynchronousInput属性设置为
    None
  • 在脚本编辑器中,编写类似的脚本:
  • string ID=”“;
    字符串BirthDate=“”;
    字符串角色=”;
    公共覆盖无效Input0\u进程InputRow(Input0Buffer行)
    {
    如果(!Row.Attribute_IsNull&&!String.IsNullOrWhiteSpace(Row.Attribute))
    {
    开关(Row.Attribute)
    {
    案例“ID”:
    ID=Row.AttributeType;
    打破
    案例“出生日期”:
    生日=Row.AttributeType;
    打破
    案例“角色”:
    Role=Row.AttributeType;
    Output0Buffer.AddRow();
    Output0Buffer.ID=ID;
    Output0Buffer.Role=角色;
    Output0Buffer.BirthDate=出生日期;
    打破
    违约:
    打破
    }
    }
    }
    
  • 将输出列映射到OLE DB目标

  • 使用SQL Server/t-SQL是不可能的吗?这看起来像是SQLServer中的一个数据轴。按原样将数据加载到一个表中,使用pivot查询原始的、加载的数据以获得所需的结果将起作用,但如果您排除t-sql作为解决方案,则会感到好奇。如果是这样,那么请忽略我:)在这里收到任何答案之前,我实际上尝试过在SQL Server中使用pivot。它工作得很好,但我遇到的问题是聚合函数。如果我对([ID]、[Birthdate]、[Role])中的属性使用MAX(属性类型),则当一些用户有多个角色(即,他们在公司中可能有多个角色,例如经理和数据分析师,但只返回经理)时,结果集仅为每个用户返回一个值。我现在正试图找到解决方案。@ManMadeNova检查输出名称是否为
    Output0
    ,如果我想将属性拆分为列,并基于另一列(例如,ID列)将属性类型列数据作为行数据,我该如何做?例如,每个人都有一个以上的角色(在属性列下)并附加到他们的ID,这对于每个人来说都是唯一的。所以对于ID 0000000001,我需要他们的角色(假设经理和分析师在不同的行中)和生日在不同的列中。@ManMadeNova为什么不发布一个包含更多细节的新问题?