2017-09-13 232 views
0

我有我想查找重复值的情况,其中SSIS中的所有列数据都不相同。删除重复SSIS wheere不是SSIS中的所有列都是相同的

我知道使用排序和聚合方法做它,但我想这情况下可以完成所有列的数据是相同

ID    | Start Date | End Time | Queue Time | Talk Time| 
===============|============|==========|============|==========| 
33000017670 |9/4/2017 |9/4/2017 |0:00:10  |0:03:30 | 
33000017672 |9/4/2017 |9/4/2017 |0:00:10  |0:03:30 | 
33000017672 |9/4/2017 |9/4/2017 |0:00:12  |0:00:00 | 
33000017673 |9/4/2017 |9/4/2017 |0:00:12  |0:05:00 | 
33000017674 |9/4/2017 |9/4/2017 |0:00:12  |0:12:00 | 

所以你可以在这里看到ID 来了两次它是我加载这些数据的表中的主键。它的来源是Excel。我知道加载前删除此记录,但我想要删除该过程。

现在这里并不是所有的记录列数据都是一样的。我想找到这样的记录删除ID确实具有通话时间是0

有人可以帮助我,我怎么可以在SSIS做到这一点

+0

如果有重复,其中两排中有通话时间大于0?您是否想要删除0通话时间的所有行,即使它们不是重复的? –

+0

只有重复的通话时间为0.并且不会有任何重复的通话时间大于0 –

回答

0

所以,很简单的方法,我认为最好的做法太是你将所有的数据放到一个表中。在那张桌子上,你可以制定你的逻辑。这样你就可以始终从源头获得真相,然后你可以添加尽可能多的逻辑。使SSIS太复杂没有意义。

我做了FLAT FILE,因为我讨厌EXCEL Source,但它几乎一样。

enter image description here

然后我想申请我的逻辑 - 你可以在一个新的数据流任务 与OLDB源的数据流上演任务后使用。

Select * from (
SELECT [ID] 
    ,[StartDate] 
    ,[EndTime] 
    ,[Qtime] 
    ,[Ttime] 
    ,ROW_NUMBER() Over(partition by ID order by TTime desc) as RN 
FROM [LegOgSpass].[dbo].[TTimeTable] 
) x 

where x.RN = 1 

结果

enter image description here

+0

没有任何其他方式来做到这一点。 –

+0

我不明白你为什么会把这种逻辑放入ssis。这是最好的方法 – plaidDK