2

我正在开发一个 SSIS 包,我需要对名称列表进行重复数据删除,按姓氏和名字排序。还有其他列,例如前缀、中间名和后缀。我遇到的问题是,在某些情况下,我会遇到以下问题:

+========+===========+============+==========+========+
| Prefix | FirstName | MiddleName | LastName | Suffix |
+========+===========+============+==========+========+
|        | John      |            | Doe      |        |
+--------+-----------+------------+----------+--------+
| Mr.    | John      |            | Doe      |        | 
+--------+-----------+------------+----------+--------+
|        | John      | A.         | Doe      |        | 
+--------+-----------+------------+----------+--------+ 

如果我只是让 sort 删除欺骗,那么就哪一行将幸存而言,这是抽签的运气。但是,显然,我更愿意保留尽可能多的信息。

最好的结果显然是合并这三个,所以在我的结果集中,我最终只得到“Mr. John A. Doe”。除此之外,如果有某种方法我可以简单地指定一个优先级,比如如果中间名有一个值,那么就取那个。我可能仍然会丢失一些信息,但在我的特定数据集中很少有像我上面的示例中那样有多个不同的欺骗。通常,它只有一个有中间名,一个没有。

对于我在 Visual Studio 2013 中的 SSDT-BI 中工作的价值。

4

2 回答 2

3
select max(Prefix), FirstName, max(MiddleName), LastName, max(Suffix) 
  from table 
 group by LastName, FirstName
 order by LastName, FirstName
于 2014-06-17T17:34:02.233 回答
1

可能这会对你有所帮助。

DECLARE @TAB TABLE 
    (EMPLOYEEID INT,
    PREFIX VARCHAR(50) ,
    FIRSTNAME VARCHAR(50) ,
    MIDDLENAME VARCHAR(50) ,
    LASTNAME VARCHAR(50) ,
    SUFFIX VARCHAR(50))
INSERT INTO @TAB VALUES
    (107,'','JOHN','','DOE',''),
    (107,'MR. ','JOHN','','DOE',''),
    (107,'','JOHN','A.','DOE',''),
    (112,'','JOE','','FRANK',''),
    (112,'','JOEL','','FRANK','')
----------------------------------------
SELECT * FROM @TAB

在此处输入图像描述

--To bring a Key, I added an EmployeeID.

SELECT  EMPLOYEEID,
        MAX(PREFIX) PREFIX,
        MAX(FIRSTNAME) FIRSTNAME,
        MAX(MIDDLENAME) MIDDLENAME,
        MAX(LASTNAME) LASTNAME,
        MAX(SUFFIX) SUFFIX 
FROM    @TAB
GROUP   BY EMPLOYEEID

结果

在此处输入图像描述

于 2014-06-18T03:51:08.340 回答