Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 удалить экземплярах строк  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
declare @a1 table
(id int not null identity(1,1),
phone decimal(18,0),
adress nvarchar(100))

insert @a1
(phone,adress)
values
(111,'new york')
insert @a1
(phone,adress)
values
(111,'new york')
insert @a1
(phone,adress)
values
(111,'new york')
insert @a1
(phone,adress)
values
(222,'maxico')
insert @a1
(phone,adress)
values
(222,'mexico')

select*from @a1 


id phone adress
----------- --------------------------------------- ----------------------------------------------------------------------------------------------------
1 111 new york
2 111 new york
3 111 new york
4 222 maxico
5 222 mexico




select phone,count(phone) as say from @a1 group by phone having count(phone)>1

phone say
--------------------------------------- -----------
111 3
222 2




как я могу удалить дубликаты phone


для примеры

после удаления

 select*from @a1 


id phone adress
----------- --------------------------------------- ----------------------------------------------------------------------------------------------------
1 111 new york
4 222 maxico



Я написал это, чтобы показать, например
в моей реальной таблице есть 50000 строк
и
1751-х экземплярах строк
27 янв 14, 11:24    [15473666]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
_djХомяГ
Guest
;with cte 
as
(
select phone, Row_number() over (partition by phone order by (select 1)) as RN

)
delete from cte where RN>1
27 янв 14, 11:27    [15473695]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
_djХомяГ
Guest
;with cte 
as
(
select phone, Row_number() over (partition by phone order by (select 1)) as RN
from таблица 

)
delete from cte where RN>1
27 янв 14, 11:29    [15473707]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
_djХомяГ
;with cte 
as
(
select phone, Row_number() over (partition by phone order by (select 1)) as RN

)
delete from cte where RN>1
Поле phone в CTE - лишнее
27 янв 14, 11:30    [15473723]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31435
yaxta
как я могу удалить дубликаты phone
Например, пронумеровать записи
declare @a1 table
(id int not null identity(1,1),
phone decimal(18,0),
adress nvarchar(100))

insert @a1
(phone,adress)
values 
(111,'new york')
insert @a1
(phone,adress)
values 
(111,'new york')
insert @a1
(phone,adress)
values 
(111,'new york')
insert @a1
(phone,adress)
values 
(222,'maxico')
insert @a1
(phone,adress)
values 
(222,'mexico')

select * from @a1

delete a
from @a1 a
	join (
		select	id,
			ROW_NUMBER() over (partition by phone order by id) as n
		from @a1
	) d
		on d.id = a.id
		and d.n > 1

select * from @a1
27 янв 14, 11:32    [15473740]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
_djХомяГ
Guest
1 да согласен про поле phone - просто для "наглядности"
2 может и CTE не поддерживается - автор не указал версию сервера
27 янв 14, 11:33    [15473749]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
_djХомяГ,

у меня sql 2000

етот скрипт не работал мой сервер


как я могу записат етот скрипт sql2000
27 янв 14, 11:34    [15473764]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
_djХомяГ
Guest
точнее ROW_NUMBER
27 янв 14, 11:34    [15473765]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
alexeyvg,

дает меня ошибку


Сообщение 195, уровень 15, состояние 10, строка 33
'ROW_NUMBER' is not a recognized function name.
27 янв 14, 11:37    [15473782]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
_djХомяГ
точнее ROW_NUMBER



Сообщение 195, уровень 15, состояние 10, строка 33
'ROW_NUMBER' is not a recognized function name.
27 янв 14, 11:38    [15473795]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
DELETE T
FROM таблица T
WHERE EXISTS(SELECT * FROM таблица TT WHERE TT.phone=T.phone AND TT.id<T.id);
27 янв 14, 11:41    [15473821]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
iap
DELETE T
FROM таблица T
WHERE EXISTS(SELECT * FROM таблица TT WHERE TT.phone=T.phone AND TT.id<T.id);


а в етом скрипте ест два таблица?
27 янв 14, 11:43    [15473849]     Ответить | Цитировать Сообщить модератору
 Re: удалить экземплярах строк  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
yaxta,

ребята всем спасибо

все получилос прекрасно

delete yeni_yeni
where id > (
    select min(id)
    from yeni_yeni m
    where m.sertiNom = yeni_yeni.sertiNom
)
select*from(
SELECT Sertinom,count(Sertinom) as say FROM DB_BOOKS..test_yeni  group by Sertinom  
)k where say=1
27 янв 14, 12:20    [15474117]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить