我正在处理SSIS包,我需要重复删除一个名称列表,按姓氏排序,然后按名字排序。还有其他列,例如前缀,中间名和后缀。我遇到的问题是,在某些情况下我会遇到像:
+========+===========+============+==========+========+
| Prefix | FirstName | MiddleName | LastName | Suffix |
+========+===========+============+==========+========+
| | John | | Doe | |
+--------+-----------+------------+----------+--------+
| Mr. | John | | Doe | |
+--------+-----------+------------+----------+--------+
| | John | A. | Doe | |
+--------+-----------+------------+----------+--------+
如果我只是让排序删除欺骗,它的运气就哪一排存活而言。但是,显然,我希望保留尽可能多的信息。
最好的结果显然是将这三个合并到我的结果集中,我最终只得到了#34; Mr。 John A. Doe"。如果不是这样的话,如果有某种方法,我可以简单地指定一个优先级,就像中间名有一个值,然后取一个。我可能仍然会丢失一些信息,但在我的特定数据集中,我的上述示例中有多个不同的欺骗信息很少见。通常,它只是一个中间名,一个没有。
为了我在Visual Studio 2013中使用SSDT-BI工作的价值。
答案 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
--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
<强>结果强>