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

Откуда:
Сообщений: 199
Добрый день, господа.
Вообщем, есть таблица:
NAME INN DATA
X1 123 DATA1
X1DATA1
X2456DATA2
X2456DATA2
X3678DATA3
X3DATA3

Интересует возможность реализации UPDATE таким образом, чтобы пустые значения поля INN заполнились значениями на основе связки NAME-INN, то есть, например, пустое поле INN для NAME = "X1" заполнилось соответствующим INN (123). В данный момент реализовал с помощью курсора, несмотря на все негативный отзывы о производительности данного решения, и ощутил все "на собственной шкуре" - при полумиллионе записей все длится аж 20 минут, что, конечно неприемлимо. Вся надежда на Ваши полезные советы.
8 авг 13, 15:19    [14681700]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
Glory
Member

Откуда:
Сообщений: 104751
tab1 a join tab1 b on a.data = b.data and b.inn is not null
where a.inn is null
8 авг 13, 15:28    [14681768]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
SiNtez_26,

Update t1
set Inn = t2.inn
from
tbl as t1 inner join tbl as t2 on t1.name = t2.name and t2.INN not is null
where
t.inn is null
8 авг 13, 15:30    [14681785]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
ergwergewrg
Guest
SiNtez_26,

select *
into #ttt1
from
(
	select 'x1' as nm, 123 as inn, 'data1' as data union all
	select 'x1', NULL, 'data1' union all
	select 'x2', 456, 'data2' union all
	select 'x2', 456, 'data2' union all
	select 'x3', 678, 'data3' union all
	select 'x3', NULL, 'data4'
) as s

with tmp as
(
	select *, min(inn) over(partition by nm) as z
	from #ttt1
)
update tmp
set inn = z

select *
from #ttt1
8 авг 13, 15:34    [14681820]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
fqwefqfwef
Guest
drop table #ttt1

select *
into #ttt1
from
(
	select 'x1' as nm, 123 as inn, 'data1' as data union all
	select 'x1', NULL, 'data1' union all
	select 'x2', 456, 'data2' union all
	select 'x2', 456, 'data2' union all
	select 'x3', 678, 'data3' union all
	select 'x3', NULL, 'data4'
) as s

update t1
set t1.inn = t2.inn
from
	#ttt1 t1
		inner join
	#ttt1 t2 on t1.inn is null and t2.inn is not null and t1.nm = t2.nm

select *
from #ttt1
8 авг 13, 15:41    [14681888]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
SiNtez_26
Member

Откуда:
Сообщений: 199
Спасибо большое, парни, незнаю, что я бы без вас делал )
8 авг 13, 16:19    [14682258]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2414
три блюдечка, с золотой каемочкой ))
8 авг 13, 16:20    [14682268]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
Алексей Куренков
Member [заблокирован]

Откуда: Москва
Сообщений: 567
SiNtez_26
Спасибо большое, парни, незнаю, что я бы без вас делал )

Выгнали бы тебя из учебного заведения по неуспеваемости и пошел бы в армию ))))).
8 авг 13, 16:56    [14682655]     Ответить | Цитировать Сообщить модератору
 Re: Сложный UPDATE значений поля  [new]
SiNtez_26
Member

Откуда:
Сообщений: 199
Да я давно отучился и отслужил) Просто специализируюсь не в SQL, вот и есть проблемы)
9 авг 13, 10:20    [14685274]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить