合并重复行而不是任意删除

时间:2014-06-17 16:34:28

标签: sql tsql ssis ssdt-bi

我正在处理SSIS包,我需要重复删除一个名称列表,按姓氏排序,然后按名字排序。还有其他列,例如前缀,中间名和后缀。我遇到的问题是,在某些情况下我会遇到像:

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

如果我只是让排序删除欺骗,它的运气就哪一排存活而言。但是,显然,我希望保留尽可能多的信息。

最好的结果显然是将这三个合并到我的结果集中,我最终只得到了#34; Mr。 John A. Doe"。如果不是这样的话,如果有某种方法,我可以简单地指定一个优先级,就像中间名有一个值,然后取一个。我可能仍然会丢失一些信息,但在我的特定数据集中,我的上述示例中有多个不同的欺骗信息很少见。通常,它只是一个中间名,一个没有。

为了我在Visual Studio 2013中使用SSDT-BI工作的价值。

2 个答案:

答案 0 :(得分:3)

select max(Prefix), FirstName, max(MiddleName), LastName, max(Suffix) 
  from table 
 group by LastName, FirstName
 order by LastName, FirstName

答案 1 :(得分: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

enter image description here

--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

<强>结果

enter image description here