Нужно объединить в одну запись каждую группу, и данные объединяются таким образом, что мы имеем наиболее полный набор атрибутов.
SELECT a.* FROM MRSVoid.dbo.Customer_Dataset$ a CROSS JOIN (SELECT [Customer_LastName] ,[Customer_FirstName] ,[Customer_AddressLine1] ,[Customer_HomePhone] ,[Customer_InternetEmail] FROM MRSVoid.dbo.Customer_Dataset$ GROUP BY [Customer_LastName], [Customer_FirstName], [Customer_AddressLine1], [Customer_InternetEmail], [Customer_HomePhone] HAVING count(*) > 1) b where ((a.Customer_LastName = b.Customer_LastName) OR (a.Customer_LastName is NULL AND b.Customer_LastName is NULL)) AND ((a.Customer_FirstName = b.Customer_FirstName) OR (a.Customer_FirstName is NULL AND b.Customer_FirstName is NULL)) AND ((a.Customer_AddressLine1 = b.Customer_AddressLine1) OR (a.Customer_AddressLine1 is NULL AND b.Customer_AddressLine1 is NULL)) AND ((a.Customer_InternetEmail = b.Customer_InternetEmail) OR (a.Customer_InternetEmail is NULL AND b.Customer_InternetEmail is NULL)) AND ((a.Customer_HomePhone = b.Customer_HomePhone) OR (a.Customer_HomePhone is NULL AND b.Customer_HomePhone is NULL)) order by Customer_AddressLine1
Этот запрос дает мне дубликаты строк из набора данных, теперь мне нужно объединить их в одну запись для каждой группы, и данные объединяются таким образом, чтобы у нас был максимально полный набор атрибутов. Пример:
а. если две повторяющиеся записи имеют общий адрес электронной почты, но только одна имеет полный почтовый адрес, то результирующая объединенная запись должна иметь как адрес электронной почты, так и почтовый адрес.
b. если две повторяющиеся записи имеют разные значения для одной из следующих записей, объединенная запись должна использовать более поздний атрибут, идентифицированный значениями временных меток ModifiedOn и/или CreatedOn.
Выборочные данные
ID CreatedOn ModifiedOn Customer_LastName Customer_FirstName Customer_AddressLine1 Customer_City Customer_State Customer_Zip Customer_HomePhone Customer_InternetEmail 27196 2012-11-14 18:51:07.000 2012-11-17 15:28:45.000 NULL David 98 Pelmor Dr Marmora OR 85044 NULL NULL 14983 2012-11-18 14:02:44.000 2012-11-18 14:02:44.000 NULL David 98 Pelmor Dr Marmora OR 85044 NULL NULL
Что я уже пробовал:
Я не получаю подхода, с которого можно начать, поэтому мне нужна помощь в поиске наилучшего подхода.
Santosh kumar Pithani
Используйте функцию row_number() rank как ROw_number()over(partition by [Customer_LastName],
[Customer_FirstName],
[Customer_AddressLine1],
[Customer_InternetEmail],
[Customer_HomePhone] приказ по функции isnull(CreatedOn,createdon и modifiedon)) Как rn " в вашем запросе и более позднем фильтре с "где rn>=2"
Member 10183768
Извините, что я не знаю об этой функции, не могли бы вы помочь мне исправить это.
Выберите a.*, ROw_number()over(partition by a.[Customer_LastName],
а.[Customer_FirstName],
а.[Customer_AddressLine1],
а.[Customer_InternetEmail],
а.[Customer_HomePhone] приказ по функции isnull(CreatedOn,createdon и modifiedon)) Как РН
Из MRSVoid.ДБО.Customer_Dataset долларов
ПЕРЕКРЕСТНОЕ СОЕДИНЕНИЕ
(ВЫБИРАТЬ
[Customer_LastName]
,[Customer_FirstName]
,[Customer_AddressLine1]
,[Customer_HomePhone]
,[Customer_InternetEmail]
От MRSVoid.dbo.Customer_Dataset$
Группа по [Customer_LastName],
[Customer_FirstName],
[Customer_AddressLine1],
[Customer_InternetEmail],
[Customer_HomePhone]
Имея count(*) > 1) b
где ((а.Customer_LastName = б.Customer_LastName) или (А.Customer_LastName нуль И B.Customer_LastName имеет значение null))
И ((А.Customer_FirstName = б.Customer_FirstName) или (А.Customer_FirstName нуль И B.Customer_FirstName имеет значение null))
И ((А.Customer_AddressLine1 = б.Customer_AddressLine1) или (А.Customer_AddressLine1 нуль И B.Customer_AddressLine1 имеет значение null))
И ((А.Customer_InternetEmail = б.Customer_InternetEmail) или (А.Customer_InternetEmail нуль И B.Customer_InternetEmail имеет значение null))
И ((a.Customer_HomePhone = b.Customer_HomePhone) или (a.Customer_HomePhone равен нулю, А b.Customer_HomePhone равен нулю))
Santosh kumar Pithani
--Я не добавляю условие фильтра просто образец запроса нет необходимости группировать по
;С CTE В КАЧЕСТВЕ(
Выберите a.*, Count(1)over(partition by a.[Customer_LastName],
а.[Customer_FirstName],
а.[Customer_AddressLine1],
а.[Customer_InternetEmail],
а.[Customer_HomePhone] приказ по функции isnull(CreatedOn,createdon и modifiedon)) Как РН
Из MRSVoid.ДБО.Customer_Dataset долларов )
выберите Distinct * из CTE, где rn>=2
Richard Deeming
Репост
Вы уже опубликовали это сообщение:
https://www.codeproject.com/Questions/1277670/Help-me-de-duplicate-a-provided-dataset[^]
Если вы хотите обновить свой вопрос, чтобы добавить дополнительную информацию, перейдите к исходному вопросу и нажмите зеленую ссылку "улучшить вопрос". НЕ опубликуйте свое обновление как новый вопрос.