2016-08-18 89 views
0

我在Excel数据表中有重复的数据行。在SSIS包中,我使用Sort转换,其中按主键列ID以升序排序。但在删除重复项之前,我想查看电子邮件列是否与我公司的域名有电子邮件。如果是这样,我希望删除其他行,而不是具有此类电子邮件地址的行。我该怎么办?请参阅下面的图片。 Image of data I have删除SSIS包中的重复,优先于列数据

在上面的数据中,我想删除两行约翰,其中电子邮件地址是[email protected]。在玛丽亚的情况下,我想删除两行电子邮件地址为[email protected],因此保留具有域mycompany.com的电子邮件地址的行。如果具有mycompany.com域的电子邮件地址的用户有多行,我想保留任意一行包含域电子邮件地址。

建议请。

回答

0

你可以在SQL中像Kobi所显示的那样做,这可能会更容易。但是,如果你在SSIS喜欢:

我的测试数据:

enter image description here

enter image description here

几点:

有条件拆分:首先,你单独与myCompany的和那些没有行。

排序和non_mycompany排序:排序输出id和删除重复。

mycompany_multicast:创建行的两个副本myCompany的

合并加入:左加入行,而不myCompany中与myCompany的行。注意连接顺序,目的是获取没有mycompany的行,并在mycompany行中没有匹配的id。

enter image description here

条件分割1:取行,而不myCompany中,并与myCompany的行不匹配的ID。您可以使用mycompany检查行的id,如果id为null,那么该行在与mycompany的行中没有匹配。

enter image description here

UNION ALL:工会最终的结果

+0

谢谢。工作得很好。 – sangam

0

你可以用这样的语句:

WITH T AS 
(
SELECT ROW_NUMBER() OVER (partition BY id ORDER BY id, CASE WHEN email LIKE '%@mycompany.com' THEN 0 ELSE 1 END) rn FROM persons 
) 
DELETE FROM T 
WHERE rn > 1 

它排序都由类似的ID和电子邮件行(与@mycompany的首选邮件是第一个列表),然后在每个组中添加ROWNUMBER和结束,它删除所有行至极具有优于ROWNUMBER 1(论文是重复的)

这里是数据到测试:

CREATE TABLE人( ID NUMERIC(5) , NAME VARCHAR(200), email VARCHAR(400));

INSERT INTO人 VALUES(100, '约翰', '[email protected]'), (100, '约翰', '[email protected]'), (100, '约翰', '[email protected]');

INSERT INTO人 VALUES(200, '超群, '[email protected]'), (200, '超群, '[email protected]'), (200, 'maria', '[email protected]');

INSERT INTO人 VALUES(300, '牛仔', '[email protected]'), (300, '牛仔', '[email protected]'), (300, 'jean', '[email protected]'), (300, 'jean', '[email protected]');

INSERT INTO人 VALUES(400, '汤姆', '[email protected]'), (400, '汤姆', '[email protected]');

+0

我一定从SSIS包做到这一点。 – sangam