Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 удаление дубликатов с апдейтом одного поля  [new]
гость 777
Guest
Гуру, помогите, плиз
Дано:
Таблица1
поля: а1 а2 summ
данные:
d1 f1 150
d1 f1 30
d2 f2 50
d2 f2 20
d2 f2 10

Надо получить:
Таблица1
Данные:
d1 f1 180
d2 f2 80

Т.е. надо удалить дубликаты по полям а1 и а2 (неважно какие строки при этом удаляться), НО в поле summ остающейся записи надо записать сумму всех summ дубликатов.
14 июл 12, 22:05    [12867685]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
antbr
Member

Откуда:
Сообщений: 75
гость 777,
как вариант использовать промежуточную таблицу
select a1,a2,sum(summ) summ
into #temp
from [Таблица1]
group by a1,a2

delete table [Таблица1]

insert into [Таблица1]
select *
from #temp
14 июл 12, 23:25    [12867908]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
гость 777
Guest
antbr,
плохой вариант.
в таблице около 10 млн. записей,
а дубликатов всенго 150 тысяч.
Но за вариант спасибо.
14 июл 12, 23:35    [12867931]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
antbr
Member

Откуда:
Сообщений: 75
гость 777,
ну не обязательно тащить во временную таблицу все 10 млн записей. Отобрать можно только эти 150 тыщ.
14 июл 12, 23:42    [12867967]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
гость 777
Guest
antbr,
insert, delete, insert.
Хотелось бы обойтись двумя операциями (update, delete).
15 июл 12, 00:16    [12868084]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
гость 777
antbr,
insert, delete, insert.
Хотелось бы обойтись двумя операциями (update, delete).
И ключ в таблице состоит из ... полей. (перечислить).
15 июл 12, 00:20    [12868091]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
гость 777
Guest
Гавриленко Сергей Алексеевич,
ключ для дубликатов: 4 поля (а1, а2, а3, а4).
Поле summ, которое надо сложить по всем дубликатам.
И еще штук 10 полей, которые не существенны для для данной проблемы, данные из них должны остаться в любой записи, которая останется после удаления дубликатов.
15 июл 12, 00:38    [12868142]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
aleks2
Guest
select a1,a2,sum(summ) summ
into #temp
from [Таблица1]
group by a1,a2
having COUNT(*)>1

delete from [Таблица1] T inner join #temp X on T.a1=X.a1 and T.a2 =X.a2

insert into [Таблица1]
select *
from #temp
15 июл 12, 19:18    [12869721]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
antbr
Member

Откуда:
Сообщений: 75
aleks2,
он уже отмел этот вариант :)
15 июл 12, 19:44    [12869782]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
delete по row_number() over ( partition by а1, а2, а3, а4 ) > 1 c output'ом во времянку. Далее апдейт оставшегося по времянке.
15 июл 12, 19:53    [12869795]     Ответить | Цитировать Сообщить модератору
 Re: удаление дубликатов с апдейтом одного поля  [new]
гость 777
Guest
Гавриленко Сергей Алексеевич
delete по row_number() over ( partition by а1, а2, а3, а4 ) > 1 c output'ом во времянку. Далее апдейт оставшегося по времянке.


Уже все сделал по варианту antbr, не дождался этого варианта. Ваше решение гораздо красивее. В следующий раз, если надо будет сделать нечто подобное, обязательно воспользуюсь.

Всем спасибо. Тема закрыта.
15 июл 12, 21:58    [12870066]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить