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

时间:2018-12-03 20:40:59

标签: ssis etl

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

我知道使用以下方法在Informatica中如何工作:

  • 聚合器转换
  • 按一列分组
  • 选择其他任何列中的MAX

但是我不知道如何在SSIS中做到这一点。

3 个答案:

答案 0 :(得分:2)

您可能正在寻找Aggregate中的Data Flow Task组件。 通常,如果您从数据库中进行采购,我发现最好创建一个查询以仅提取唯一的数据。这样可以节省周围的资源并提高性能。

答案 1 :(得分:0)

除了billinkc提到的内容之外,如果您使用的是SQL-Server / Oracle,则可以通过引入ROW_NUMBER() OVER (PARTITION BY <ID> ORDER BY <ID>来解决它。这将为ID的唯一行生成1,为重复项生成递增值。

接下来,或者使用WHERE condition = 1在源SQL中进行过滤,或者在条件为Conditional Split的SSIS转换中使用row = 1

根据问题陈述修改分区并进行排序。

答案 2 :(得分:0)

您可以使用此代码

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

OR 按一定顺序排列行并取第一行,我在下面给出的例子

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