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

Откуда:
Сообщений: 68
Таблица:

scheme_id nomer sum
1 123 5340
2 123 0
2 535 3450
1 567 2360
2 567 0


Там, где для одного nomer две схемы, по схеме 2 sum=0. Иначе схема 2 и тогда sum>0.
Нужно удалить строки со схемой 2 в случае наличия двух схем для одного номера. Как?
23 ноя 12, 16:11    [13520409]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
iiyama
Member

Откуда:
Сообщений: 642
смотрю ни FAQ, ни TOP10 вопросов нынче не в моде, может сегодня уже пятница?
23 ноя 12, 16:23    [13520505]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
icprog
Member

Откуда:
Сообщений: 166
iiyama,

Например https://www.sql.ru/forum/actualthread.aspx?tid=922531
23 ноя 12, 16:24    [13520514]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
nikolay_y
Member

Откуда:
Сообщений: 68
icprog,
да но у меня записи не идентичны. Как удалить именно ту, где sum=0 ?
23 ноя 12, 16:36    [13520617]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
Glory
Member

Откуда:
Сообщений: 104751
nikolay_y
да но у меня записи не идентичны. Как удалить именно ту, где sum=0 ?

Соединить таблицу с собой и проверить начлие того же nomer, но с другой scheme_id и sum<>0
23 ноя 12, 16:38    [13520624]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
nikolay_y
Member

Откуда:
Сообщений: 68
DELETE FROM [PF].[dbo].[DC_T1]
WHERE
EXISTS(SELECT 1 FROM [PF].[dbo].[DC_T1] b WHERE b.[nomer] =[PF].[dbo].[DC_T1].[nomer]) and scheme_id=2

Что не верно?
23 ноя 12, 16:48    [13520680]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
Glory
Member

Откуда:
Сообщений: 104751
nikolay_y
Что не верно?

Нет проверки на различие в scheme_id.
Нет проверки на значеие sum.
23 ноя 12, 16:50    [13520690]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
nikolay_y
Таблица:

scheme_id nomer sum
1 123 5340
2 123 0
2 535 3450
1 567 2360
2 567 0


Там, где для одного nomer две схемы, по схеме 2 sum=0. Иначе схема 2 и тогда sum>0.
Нужно удалить строки со схемой 2 в случае наличия двух схем для одного номера. Как?


Ну... не с нулем все понятно, если перефразировать так к примеру, оставлять при повторении номеров по принципу - максимальное поле SUM, в случае если есть дубли и по номеру и по сумме, оставлять с минимальной схемой, то решение такое...

with cte as
(
	select *, rn=row_number() over
		(
			partition by nomer
			order by sum desc
		)
	from таблица
)
delete from cte where rn>1
26 ноя 12, 16:01    [13530635]     Ответить | Цитировать Сообщить модератору
 Re: удаление повторений  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
Алексей Куренков
nikolay_y
Таблица:

scheme_id nomer sum
1 123 5340
2 123 0
2 535 3450
1 567 2360
2 567 0


Там, где для одного nomer две схемы, по схеме 2 sum=0. Иначе схема 2 и тогда sum>0.
Нужно удалить строки со схемой 2 в случае наличия двух схем для одного номера. Как?


Ну... не с нулем все понятно, если перефразировать так к примеру, оставлять при повторении номеров по принципу - максимальное поле SUM, в случае если есть дубли и по номеру и по сумме, оставлять с минимальной схемой, то решение такое...

with cte as
(
	select *, rn=row_number() over
		(
			partition by
				nomer
			order by
				sum desc,
				scheme_id
		)
	from таблица
)
delete from cte where rn>1


сори - опечатался )
26 ноя 12, 16:03    [13530649]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить