如何为SSIS中的每个重复行只获取一条记录

  • 本文关键字:获取 记录 一条 SSIS ssis etl
  • 更新时间 :
  • 英文 :


如何为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 = 1Conditional 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

最新更新