如何为SSIS中的每个重复行只获取一条记录?
我知道它是如何在Informatica工作的,使用:
- 聚合器转换
- 按一列分组
- 选择任何其他列的MAX
但我不知道如何在SSIS中执行此操作。
Data Flow Task
中的Aggregate
组件可能就是您想要的。如果您从数据库中获取数据,通常情况下,我发现最好创建一个查询,从一开始只提取唯一的数据。它节省了所有资源,性能更好。
除了billinkc提到的之外,如果您使用的是SQLServer/Oracle,您还可以通过引入ROW_NUMBER() OVER (PARTITION BY <ID> ORDER BY <ID>
来解决这个问题。这将按ID为唯一行生成1,并为重复行生成增量值。
接下来,在源SQL中使用WHERE condition = 1
进行筛选,或者在SSIS转换中使用条件为row = 1
的Conditional Split
。
根据问题说明修改您的分区和排序。
您可以使用此代码
WITH resultTable AS (
SELECT
RT.*,
LT.MID
FROM MyTable RT
Inner JOIN
(
SELECT SEQ,Max(ID) as MID
FROM MyTable
GROUP BY SEQ
) LT ON RT.SEQ = LT.SEQ AND RT.ID = LT.MID)
select resultTable.* from resultTable
或者按照一定的顺序排列行,取第一行,我在下面给出了这个例子
WITH resultTable AS (
SELECT
RT.*,
ROW_NUMBER() OVER ( PARTITION BY RT.[ColumnForGroupBy]
ORDER BY RT.ID DESC ) AS [ROW NUMBER]
FROM MyTable RT
Inner JOIN
(
SELECT [ColumnForGroupBy]
FROM MyTable
GROUP BY [ColumnForGroupBy]
) LT ON RT.[ColumnForGroupBy] = LT.[ColumnForGroupBy])
select resultTable.* from resultTable
WHERE resultTable.[ROW NUMBER] = 1