【发布时间】:2019-10-22 22:23:58
【问题描述】:
我有一个平面文件,看起来像这样
┌────────┬──────────┬──────────┐ │ ITEM │ QTY_ON_HAND LOCATION│ ├────────┼──────────┼──────────┤ │ BOX │ 1 │ A │ │ 盒子 │ 0 │ B │ │ 东西 │ 1 │ C │ │ 其他 │ 2 │ A │ └────────┴──────────┴──────────┘ITEM 可以有重复项,我需要保留 QTY_ONHAND 最高的那个(上面示例中的第一个 BOX),如果两者具有相同的值,那么我会保留任何出现。
方法:
使用排序 + 删除具有重复排序值的行。排序会删除随机出现的,我不能保证最高值的会保留
脚本组件。我可以在类似于this answer 的脚本组件中检测到重复项,但我必须将所有行存储在内存中,将每一行与所有存储的行集进行比较,保持最高,删除重复项并以某种方式只返回有效的行,听起来效率很低,但是,没有太多行,所以我会考虑它(我仍然不确定如何实现)。
聚合转换。我知道我可以按 ITEM 对行进行分组并使用 MAX 操作来保留具有最高值的行,这是我现在正在尝试做的,但我被卡住了。
来源:
SSIS: Flat File Source to SQL without Duplicate Rows
Remove duplicate in SSIS package with preference over a column data
【问题讨论】:
-
聚合转换应该可以解决问题。你有什么问题?
-
@Ferdipux 是的,它适用于聚合转换,我在处理某一特定列时遇到了问题,但最后一切正常,谢谢
-
如果你在 LOCATION 上达到最大值,你会得到位置
B的 BOX,而不是A所要求的。 -
谢谢,@Nick.McDermaid,但我在数量上使用 MAX,而不是在位置上
-
那么你必须按位置分组,这意味着你得到两行?还是 SSIS 聚合不能那样工作?
标签: ssis