Sql server 基于另一列筛选一列中的数据值,然后将值插入同一SQL表中的不同列
这是我正在尝试使用SSI和条件拆分转换来解决的一个难题。我有一个.csv文件,它在一行中包含每个唯一用户的属性数据,在另一列中包含每个属性的值。i、 e: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
Attribute, Attribute Type
ID, 0000000001
Birthdate, 09/02/1976
Role, Manager
或者类似的东西。我需要将属性拆分为包含属性类型数据的列。因此,预期的结果将是:
ID, Birthdate, Role,
0000000001, 09/02/1976, Manager,
然后我需要将它们插入一个包含新列的SQL表中
通过对一列进行条件拆分转换(例如使用表达式属性==“ID”,然后将.csv源中的整个属性列映射到SQL目标表中的ID列),我可以很好地完成这一点,但问题在于对其他列进行条件拆分转换。我似乎无法让一个联盟完成我想让它做的事情
有什么建议吗?您可以使用脚本组件实现:
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=出生日期;
打破
违约:
打破
}
}
}
使用SQL Server/t-SQL是不可能的吗?这看起来像是SQLServer中的一个数据轴。按原样将数据加载到一个表中,使用pivot查询原始的、加载的数据以获得所需的结果将起作用,但如果您排除t-sql作为解决方案,则会感到好奇。如果是这样,那么请忽略我:)在这里收到任何答案之前,我实际上尝试过在SQL Server中使用pivot。它工作得很好,但我遇到的问题是聚合函数。如果我对([ID]、[Birthdate]、[Role])中的属性使用MAX(属性类型),则当一些用户有多个角色(即,他们在公司中可能有多个角色,例如经理和数据分析师,但只返回经理)时,结果集仅为每个用户返回一个值。我现在正试图找到解决方案。@ManMadeNova检查输出名称是否为
Output0
,如果我想将属性拆分为列,并基于另一列(例如,ID列)将属性类型列数据作为行数据,我该如何做?例如,每个人都有一个以上的角色(在属性列下)并附加到他们的ID,这对于每个人来说都是唯一的。所以对于ID 0000000001,我需要他们的角色(假设经理和分析师在不同的行中)和生日在不同的列中。@ManMadeNova为什么不发布一个包含更多细节的新问题?