【发布时间】:2014-06-17 16:34:27
【问题描述】:
我正在开发一个 SSIS 包,我需要在其中对名称列表进行重复数据删除,按姓氏和名字排序。还有其他列,例如前缀、中间名和后缀。我遇到的问题是,在某些情况下,我会遇到以下问题:
+========+===========+============+==========+========+
| Prefix | FirstName | MiddleName | LastName | Suffix |
+========+===========+============+==========+========+
| | John | | Doe | |
+--------+-----------+------------+----------+--------+
| Mr. | John | | Doe | |
+--------+-----------+------------+----------+--------+
| | John | A. | Doe | |
+--------+-----------+------------+----------+--------+
如果我只是让 sort 删除欺骗,那么就哪一行将幸存而言,这是抽签的运气。但是,显然,我更愿意尽可能多地保留信息。
最好的结果显然是合并这三个,所以在我的结果集中,我最终只有“Mr. John A. Doe”。除此之外,如果有某种方法我可以简单地指定一个优先级,比如如果中间名有一个值,那么就取那个。我可能仍然会丢失一些信息,但在我的特定数据集中很少有像我上面的示例中那样有多个不同的欺骗。通常,只有一个有中间名,一个没有。
对于我在 Visual Studio 2013 的 SSDT-BI 中工作的价值。
【问题讨论】:
-
使用聚合操作怎么样?第一个和最后一个分组,最大前缀/中间/后缀
-
不,没有身份证。它实际上是一个 varchar 字段,由旧表中的多个名称组成,我将其分解并移动到具有外键的单个记录,返回到新模式中的父记录。合并的条件很简单,如果名字和姓氏匹配。通常这可能不是一个足够好的条件,但我已经检查了数据集并且没有不是真正的骗子。
-
@billinkc:这是一个很好的建议,可以满足我的“B 计划”,或者如果其他人不这样做,就选择一个中间名。我仍然认为,如果我能实现它,合并记录将是更好的选择。如果您添加您的评论作为答案,我至少可以给您一个赞成票,如果我不能得到我的第一选择,我最终会接受它。
-
那请帮我理解选项 A。在上面,您将有 4 行进来。魔术发生了,4 行都用相同名称的元素出去了?
-
三行进去,一行出来,但它包含了三行中的任何一行提供的所有信息,即“先生。(来自第 2 行)约翰(所有行)A.(从第 3 行开始)Doe(所有行)”。