这是一个非常奇怪的问题,不太确定如何标题。我遇到的问题是SSIS任务中的一些数据行需要根据其他行进行修改。
Name Location IsMultiple Bob England Jim Wales John Scotland Jane England
一个简化的数据集,包含一些名称,它们的位置以及需要更新的列“IsMultiple”,以显示哪些行共享位置。 (Bob和Jane的行将在上面的示例中标记为“True”)。
在我的情况下,涉及的逻辑要复杂得多,因此使用sql的解决方案不合适。
我最初的想法是使用异步脚本任务,接收所有数据行,解析它们,然后在输入最后一行之后输出它们。我能想到这样做的唯一方法是在PostExecute阶段调用行创建,这不起作用。
有没有更好的方法来解决这个问题?
答案 0 :(得分:4)
SSIS解决方案有两种选择。使用这两个选项,您需要按位置排序的数据。如果你可以在SQL源代码中执行此操作,那将是最好的。否则,您有Sort组件。
使用排序数据作为输入,您可以使用脚本组件比较相邻行的值,以查看是否存在多个位置。
另一种选择是将数据路径分成两部分。通过添加多播组件来完成此操作。第一条路径将是您目前拥有的主要路径。在第二个任务中,在Multicast组件之后添加聚合转换。编辑聚合并选择位置作为分组依据操作。选择(*)作为全部计数。输出将是按位置计数的行。
在Aggregate之后,添加Merge Join组件并选择第一个和第二个数据路径作为输入。您的连接键应该是每个路径的“位置”列。路径1的所有输入都应该是输出,并包括路径2的计数作为输出。
在派生列中,修改isMultiple列,其表达式表达“如果count大于1则为true,否则为false”。
答案 1 :(得分:1)
如果可能,我建议您在数据流之前的控制流上的SQL任务中使用纯SQL执行此操作。一个简单的UPDATE
查询,您GROUP BY
位置并为大于1的所有内容执行HAVING COUNT
应该能够执行此操作。但如果这是一个简化版本,这可能是不可行的。
如果在数据流完成之前数据不可用,您可以在控制流上的数据流之后放置SQL任务。