如何为 SSIS 中的每个重复行仅获取一条记录?
我通过以下方式知道它在 Informatica 中的工作原理:
- 聚合器转换
- 按一列分组
- 选择任何其他列的 MAX
但我不知道如何在 SSIS 中做到这一点。
a 中的Aggregate
组件Data Flow Task
可能是您正在寻找的。如果您从数据库中采购,通常我发现创建一个查询以仅提取唯一数据开始时更好。它可以节省周围的资源并且性能更好。
你可以使用这个代码
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
除了 billinkc 提到的之外,ROW_NUMBER() OVER (PARTITION BY <ID> ORDER BY <ID>
如果您使用的是 SQL-Server/Oracle,您可以通过介绍来解决它。这将按 ID 为唯一行生成 1,为重复项生成增量值。
接下来,使用WHERE condition = 1
ORConditional Split
在 SSIS 转换中使用条件过滤源 SQL row = 1
。
根据问题陈述修改您的分区和排序。