我有一个联系人列表,其中包含来自两个不同数据库的信息,这些数据库已执行了Union All on and sorted。现在我有一个聚合列表,如下所示:
contactid add1 add2 city phone fullname source
----- ----- ----- ----- ----- ----- -----
BOOG1 1598 Tree Drive Apt:215 NYC 718-888-9989 Andrew Sample DB1
NULL NULL Apt:215 718-888-9989 Andrew Sample DB2
BOOG6 1598 Tree Drive Apt:215 NYC 718-888-8888 Andria Toefield DB1
NULL NULL Apt:215 718-888-9888 Andria Toefield DB2
....
....
....
基本上,我想使用一个脚本组件来比较Rows安德鲁样本,如果列是空的,那么选择一个不是,如果有数据冲突,那么从db2中选择数据作为替换它的数据。所以最终结果应如下所示:
contactid add1 add2 city phone fullname
----- ----- ----- ----- ----- -----
BOOG1 1598 Tree Drive Apt:215 NYC 718-888-9989 Andrew Sample
BOOG6 1598 Tree Drive Apt:215 NYC 718-888-9888 Andria Toefield
....
....
....
我不确定如何在C#中开始编写脚本。我不知道如何选择行,然后比较行中的某些列。
答案 0 :(得分:1)
我不会尝试使用脚本任务 - 跨行比较太难了。
我会在名称列上添加模糊分组转换。这将添加一个_key_out列(以及其他列)。我会把结果放到SQL表中。
然后我会在_key_out列上编写一个以GROUP BY为特色的复杂SQL查询,并为每个其他列的CASE语句解析你的"缺少"和#34;冲突"要求。
一旦你将它指向任何规模的真实世界数据集,这种设计的好处将真正得到回报。毫无疑问,您会遇到上述示例中更复杂的情况,例如: DB1有2" John Smith"行和DB2有3" John Smith"行。您将能够调整模糊分组参数和/或添加辅助模糊分组以打破关系。
在此过程中,您可以查询中间SQL表中的结果,以优化对这些问题的处理。