|
0 Всего найдено: 5
FIL_dubna
Сообщение
28/04/2011 06:49
Копия темы
Копирование дубликатов Здравствуйте. Вопрос в том, как сделать копирование дубликатов из одной таблицы в другую (кроме 1-го экземпляра). База данных MSSQL2008. Написал так и не вышло: alter procedure copie as begin delete Copies; insert into Copies SELECT c.[ID_Company], c.[Company_name] FROM [Company] c WHERE c.[Company_Name] IN ( SELECT cc.[Company_Name] FROM [Company] cc Where c.ID_Region = cc.ID_Region AND cc.[Company_name] not in( select MIN (cc1.[Company_Name]) FROM [Company] cc1 GROUP BY Company_Name HAVING COUNT(*) > 1 ) GROUP BY Company_Name HAVING COUNT(*) > 1 ) ORDER BY Company_Name end
RustamS
Сообщение
29/04/2011 12:26
Копия темы
Подзапросом не решается,т.к. им невозможно вытащить критерий отсева одновременно с именем группы Я предположил, что: значения поля ID_Company уникальны по всей таблице Company или хотя бы в пределах одного региона (т.е. позволяют различать между собой коипании с одинаковыми именами) поле ID_Region позволяет дополнительно разделить таблицу на независимые фрагменты (т.е. две компании в разных регионах могут иметь одинаковые наименования, и это не считается дубликатом) INSERT INTO [Copies] SELECT c.[ID_Company], c.[Company_Name], c.[ID_Region] FROM [Company] c LEFT JOIN (select min([ID_Company])[min_ID_Company], [Company_Name], [ID_Region] FROM [Company] GROUP BY [Company_Name], [ID_Region]) mc ON mc.[Company_Name] = c.[Company_Name] AND mc.[ID_Region] = c.[ID_Region] WHERE NOT (c.[ID_Company] = mc.[min_ID_Company] OR c.[Company_Name] IS NULL OR c.[ID_Region] IS NULL) Если деление на регионы не нужно (т.е. следует обеспечить уникальность наименований в пределах таблицы), то просто удалите из запроса фрагменты, содержащие [ID_Region].
FIL_dubna
Сообщение
29/04/2011 12:48
Копия темы
Уже решил вот таким способом: alter procedure copie as begin delete Copies; insert into Copies SELECT c.[ID_Company], c.[Company_name] FROM [Company] c WHERE EXISTS( SELECT cc.[Company_Name], cc.ID_company FROM [Company] cc Where c.ID_Region = cc.ID_Region AND cc.Company_Name = c.Company_name AND c.ID_company > cc.ID_company ) ORDER BY Company_Name end
RustamS
Сообщение
03/05/2011 06:08
Копия темы
0
Красивое решение, поздравляю. Могу только порекомендовать использовать isnull() для сопоставляемых полей. |
Выразить восторг, поругаться или предложить что-нибудь можно на форуме |
Для обсуждения этого сервиса так же есть темы на фрилансе по поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал" |