Объединение дублирующихся строк вместо произвольного удаления
Я работаю над пакетом служб 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
результат