我在SSIS中有三列来自数据库。
价格 数 标题
我希望GROUP BY by" Price"和"数字"。问题是,有些行具有相同的数字但标题不同。所以我想拥有最高标题。
在像Pentaho或OWB这样的其他ETL工具中,它可以工作。有些功能我可以按价格和编号进行GROUP BY,并获得标题的最大值。
有解决方法吗?
答案 0 :(得分:1)
您是否看过Aggregate转型?
或者,您可以在源SQL中执行此操作,其优点是数据库引擎将对其进行处理(SSIS聚合转换正在阻塞,因此它会在将所有行加载到内存之前将其加载到内存中)。 / p>
更新:如果在原始SQL中预先聚合(在进入SSIS之前)不是一个选项,您可以为标题添加代理键:
SELECT
Price,Number,Title,ROW_NUMBER() OVER
(PARTITION BY Price,Number ORDER BY Title ) AS TitleOrdinal
FROM ...
然后您的SSIS Aggregate可以使用MAX(TitleOrdinal)(这是一个数字列)作为MAX(标题)的代理。
要获得实际的MAX(标题),您必须将原始数据集加入此聚合集,价格= Price,Number = Number,TitleOrdinal = [MAX(TitleOrdinal)来自聚合集合。)