Поисковая форма:) поиск по free-lance.ru Топ/история/обновления фриланса, по разным параметрам (темы, сообщения, пользователи...) Автоматическое удаление постов от ненужных юзеров в топике (php скрипт) Досье(точный ник)
 

Ник (или часть ника):
?
Какой текст ищем:
?
Раздел блогов:
За срок
дней
Тип поиска: (по вхождению: по тексту гуг выдаст посты с "гуг", "гугл", "огугл"; "полнотекстовый": по тексту "гуг" выдаст посты только с "гуг")
По вхождению строки:  Полнотекстовый: 
(поиск не 100% актуальный, есть определённая задержка при обновлении данных для поиска. )
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 Копия темы
Красивое решение, поздравляю. Могу только порекомендовать использовать isnull() для сопоставляемых полей.
FIL_dubna Сообщение 03/05/2011 09:40 Копия темы
Спасибо!:)
0

©2008 edogs egods
Выразить восторг, поругаться
или предложить что-нибудь можно на форуме
Для обсуждения этого сервиса так же есть темы на фрилансе по
поиску , флудотопу ,и по удалённым сообщениям ,и по Актуальным/популярным темам , и по топу "кто кому больше наотвечал"