Удаление дублирующихся записей 2

А вот еще небольшая подборка на эту тему:
Если в таблице t( a int, b int ) в поле а есть дубли, а поле b содержит уникальные значения, то для
исключения дублей по полю a в MSSQL можно использовать такие запросы:

 select a, min(b) as minb into #u from t group by a 
delete t where not exists(select * from #u u where t.a=u.a and t.b=u.minb)


=====================================================================

Если есть автоинкремент - то достаточно просто:

 delete from Table1 from Table1 t1 inner join (select Col1,Col2,max(ID) as ID 
from Table1 group by Col1,Col2 having count(Col1)>1) t2 on t2.col1=t1.col1
and t2.col2=t1.col2 and t1.id<>t2.id


вместо max можно min - по желанию.
=====================================================================

Для начала:

 delete from YourTable where rowid in ( ( selecta.rowid rid from YourTable a , 
( select Col1,Col2 from YourTable group by Col1, Col2 having count(0)>1 ) b
where a.Col1= b.Col1 anda.Col2= b.Col2 ) minus ( select min(rid) from
( selecta.rowid rid ,a.Col1,a.Col2 from YourTable a , (select Col1,Col2
from YourTable group by Col1, Col2 having count(0)>1 ) b where a.Col1= b.Col1
and a.Col2= b.Col2 ) group by Col1 , Col2 ) )


=====================================================================
Да уж, лишние возможности только отбивают желание думать головой. Откуда такое непреодолимое желание
использовать конструкцию from (select ...) ? Всё же проще делается

 declare @Table1 table(id int identity, Col1 int,Col2 int) insert @Table1 
select 1,1 insert @Table1 select 1,1 insert @Table1 select 1,1 insert @Table1
select 1,2 delete t1 from @Table1 t1,@Table1 t2 where t1.Col1=t2.Col1
and t1.Col2=t2.Col2 and t1.id>t2.id select * from @Table1



Надо наверное добавить, что без ключевого поля здесь не обойтись в любом случае - записи же должны как-то
отличаться
=====================================================================
А я сделал так,
Сначала делаю insert distinct(po imeni), затем делаю update и запоминаю соответствующие значения из остальных колонок, вроде работает.
Но вариант с identity, думаю лучше.


Количество повторных записей отсортированных по возрастанию.

Необходимо написать SQL запрос, который выводит все дублируещиеся записи из таблицы
Table1 c полями Key и Value. В результатах запроса необходимо высветить значения полей Key
и Value и количество дублируемых записей. Результаты должны быть отсортированы по этому
количеству.

SELECT KEY,VALUE,COUNT(*)
FROM TABLE1
GROUP BY KEY, VALUE
HAVING COUNT(*)>1
ORDER BY COUNT(*)

--------------------------------------------------------------------------------------------------------------------------
Сравнение двух таблиц

 select case when Count(*) = (select Count(*) from Table2) then 1 
else 0 end as Flag from Table1 t1 where Exists(select * from Table2 t2
where t1.Col1 = t2.Col1 and t1.Col2 = t2.Col2 and t1.Col3 = t2.Col3)


Данный запрос вернет поле Flag с 1 - если все совпадает и 0, если не совпадает

Комментарии закрыты