Использование SQL Server 2000.
Данные испытаний:
create table #t (grup varchar(200))
insert into #t values ('OPEN SYSTEMS SUB GR')
insert into #t values ('OPEN SYSTEMS SUB GR (GM/BTIB(1111)/BTITDBL(2222)/BTVY(4444)/ACSVTYSAG')
insert into #t values ('INFRASTRUCTURE SOFT SUB GR')
insert into #t values ('INFRASTRUCTURE SOFT SUB GR (GM/BTIB(1111)/BTUGBL(3333)/BTUGBL(3333)/BTAUSGAG')
insert into #t values ('MAIN SERVER ONLİNE SYS SUB GR (GM_BTIB(1111)_BTITDBL(2222)_BTSY(5555)_ANBOSAG')
insert into #t values ('MAIN SERVER SUB GR')
insert into #t values ('MAIN SERVER SUB GR (GM_BTIB(1111)_BTITDBL(2222)_BTVY(4444)_ANBVTYSAG')
insert into #t values ('XTM/YTM SUB GR')
insert into #t values ('XTM/YTM SUB GR (GM_BTIB(1111)_BTUGBL(3333)_BTAU(6666)_BTABAG')
insert into #t values ('CARDS SUB GR (GM_BTIB(1111)_BTUGBL(3333)_BTKOU(7777)_BTBKAG')
insert into #t values ('SYSTEMS DEV. SUB GR (GM_BTIB(1111)_BTSGBL(8888)_BTPB(9999)_BBASGAG')
insert into #t values ('PERSONAL B. SUB GR')
insert into #t values ('PERSONAL B. SUB GR (GM/BTIB(1111)/BTUGBL(3333)/BTAU(6666)/BTBISAG')
insert into #t
select L.*
from #t L
cross join #t R
insert into #t
select L.*
from #t L
cross join #t R
Предоставление vver 33 000 тестовых рядов.
Шаг 1, создайте временную таблицу для хранения преобразования коротких имен групп в длинные имена групп:
select substring(grup, 1, charindex(' (', grup)) as short_grup
, grup as long_grup
into #Lookup
from #t
WHERE GRUP LIKE '%(%(%)%(%)%(%)%'
group by grup
Шаг 2, используйте приведенную выше временную таблицу в операторе обновления:
update target
set target.grup = source.long_grup
from #t target
inner join #Lookup source
on target.grup = source.short_grup
ПРИМЕЧАНИЕ: Я пытался использовать встроенный просмотр за один шаг, но это занимает гораздо больше времени (в настоящее время на 7+ минут):
update target
set target.grup = source.long_grup
from #t target
inner join (select substring(grup, 1, charindex(' (', grup)) as short_grup
, grup as long_grup
from #t
WHERE GRUP LIKE '%(%(%)%(%)%(%)%'
group by grup) source
on target.grup = source.short_grup
Другие мысли о
- Если имена групп стабильны, создайте постоянную таблицу с сопоставлением коротких и длинных имен вместо создания временной таблицы каждый раз.
- Индексы короткого имени и группы могут ускорить объединение. Тест, чтобы увидеть.
- Можно ли исправить систему ввода коротких имен?