Объединение дублирующихся строк вместо произвольного удаления

Я работаю над пакетом служб SSIS, где мне нужно дедуплицировать список имен, отсортированный по фамилии, а затем по имени. Есть дополнительные столбцы, такие как префикс, отчество и суффикс. Проблема, с которой я сталкиваюсь, заключается в том, что в некоторых ситуациях у меня появляются такие ошибки, как:

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

Если я просто позволю сортировке удалить дуплеков, мне повезет с розыгрышем с точки зрения того, какой ряд выживет. Но, очевидно, я бы предпочел сохранить как можно больше информации.

Очевидно, что лучшим результатом будет объединение этих трех, поэтому в моем наборе результатов я получу только "Мистер Джон А. Доу". Если не считать этого, если есть какой-то способ, которым я могу просто указать приоритет, например, если у среднего имени есть значение, тогда возьмите его. Я все еще могу потерять некоторую информацию, но в моем конкретном наборе данных редко встречаются множественные изменения, как в моем примере выше. Обычно это всего лишь одно со вторым именем и одно без.

Для чего это стоит я работаю в SSDT-BI в Visual Studio 2013.

2 ответа

Решение
select max(Prefix), FirstName, max(MiddleName), LastName, max(Suffix) 
  from table 
 group by LastName, FirstName
 order by LastName, FirstName

Может быть, это поможет вам.

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

результат

введите описание изображения здесь

Другие вопросы по тегам