我正在开发一个ssis包来修复表中的一些数据。该表看起来像这样:
CustID FieldID INT_VAL DEC_VAL VARCHAR_VAL DATE_VAL
1 1 23
1 2 500.0
1 3 David
1 4 4/1/05
1 5 52369871
2 1 25
2 2 896.23
2 3 Allan
2 4 9/20/03
2 5 52369872
我想将其转化为:
CustID FirstName AccountNumber Age JoinDate Balance
1 David 52369871 23 4/1/05 500.0
2 Allan 52369872 25 9/20/03 896.23
目前,我已将SSIS包设置为从源表中提取数据,对字段ID进行条件拆分,然后在每次拆分时生成派生列。我坚持的部分是将数据重新加入。我想将数据重新加入CustId。
但是,join merge只允许你加入2个数据集,最后我需要加入大约30个数据集。有没有一个很好的方法可以做到这一点,而不必有一堆合并连接?
答案 0 :(得分:2)
这看起来有点尴尬,为什么不在查询中做呢?
select
CustID,
max(case when FieldID = 3 then VARCHAR_VAL else null end) as 'FirstName',
max(case when FieldID = 5 then INT_VAL else null end) as 'AccountNumber',
max(case when FieldID = 1 then INT_VAL else null end) as 'Age',
max(case when FieldID = 4 then DATE_VAL else null end) as 'JoinDate',
max(case when FieldID = 2 then DEC_VAL else null end) as 'Balance'
from
dbo.StagingTable
group by
CustID
如果您的源系统是MSSQL,那么您可以在SSIS中使用该查询,甚至可以在源数据库中创建一个视图(如果您允许)。如果没有,则将数据直接复制到MSSQL中的临时表,然后从那里查询。