下面给出了包含数据的源表和目标表结构。源表有事务类型列,基于此列的目标表行将被定义。假设:源表数据是
在第一行SalesTranId = 1和TranType =每月,因为这是一个月度事务目标表,将填充30行,值为500/30 = 16.6,如下所示
当Source TranType = Yearly时,目标表必须具有基于源表行的365行。 如何在SSIS包中做到这一点。
来源表:
目标表:
SSIS包:
答案 0 :(得分:2)
我同意Tab和Nick的观点,但你坚持在SSIS中这样做。
你必须做出一些假设才能使我的逻辑工作:
每月翻译为30,每季度翻译为90,每年翻译为365。
导入您的来源。
添加脚本组件并创建目的地的第二个输出。
//Determine Divisor int DIV = 0; switch(Row.TranType.ToLower()) { case "monthly": DIV=30; break; case "quarterly": DIV=90; break; case "yearly": DIV=365; break; } for (int i = 1; i<=DIV;i++) { destBuffer.AddRow(); destBuffer.SalesTranID = Row.SalesTransID; destBuffer.TranType = Row.TranType; destBuffer.TranAmt = Row.TranAmt/DIV; }
答案 1 :(得分:1)
如果必须在数据流中执行此操作,则需要使用脚本组件。
我个人会按原样将数据发送到临时表,并在将存储过程从登台表移动到最终目标表时进行拆分。它会表现得更快。