Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как мне надо написать? / 6 сообщений из 6, страница 1 из 1
18.03.2002, 21:39
    #32025605
andrei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мне надо написать?
Дана таблица Table1 и ее схема Numb int NOT NULL, Code char( 8 ) NOT NULL. Поле Numb уникальное, а поле Code содержит повторяющиеся стойности, но не имеет больше чем 26 повторения одной и той же стойностю. Как мне надо написать лучшему образу T-SQL скрипт, который сперва модифицирует поле Code так, что все стойности были уникальными, если я заменю только первый символ буквой латинского альфавита?
Например: Таблица Table1 имеет 3 ряда:
Num,Code
1,A0000001
2,A0000001
3,A0000002
Как результат мне надо:
Num,Code
1,A0000001
2,B0000001
3,A0000002
...
Рейтинг: 0 / 0
18.03.2002, 23:12
    #32025608
Lasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мне надо написать?
Лениво мне рыться в хелпе, но идеи у меня две:
1. Заменять в цикле записи, которых две и более а A+значение, B+значение,...
2. Написать курсор и шастать по записям, перебирая все буквы алфавита

А что будет быстрее, сам решай!!!!
На войне все средства хороши!!!! Главное - деньги, результат, скорость, оптимальность!!!
Так МИКРОПУШИСТЫЙ пишет свои системы
...
Рейтинг: 0 / 0
18.03.2002, 23:14
    #32025609
Lasy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мне надо написать?
Лениво мне рыться в хелпе, но идеи у меня две:
1. Заменять в цикле записи, которых две и более а A+значение, B+значение,...
2. Написать курсор и шастать по записям, перебирая все буквы алфавита

А что будет быстрее, сам решай!!!!
На войне все средства хороши!!!! Главное - деньги, результат, скорость, оптимальность!!!
Так МИКРОПУШИСТЫЙ пишет свои системы
...
Рейтинг: 0 / 0
19.03.2002, 07:25
    #32025627
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мне надо написать?
Ну зачем же сразу цикл и курсор

Если я правильно понял идею, то замена первого символа должна идет строго по порядку


create table #table1(num int not null, code char(8 ) not null)
insert #table1 values(1, 'A0000001')
insert #table1 values(2, 'A0000001')
insert #table1 values(3, 'A0000001')
insert #table1 values(4, 'A0000002')
insert #table1 values(5, 'A0000002')
insert #table1 values(6, 'A0000003')

/*
select *, CHAR(ASCII(LEFT(a.code,1))+(a.num-a.a_num))+SUBSTRING(a.code, 2, 7) as code
from
(select b.num, b.code, min(a.num) as a_num
from #table1 a
inner join #table1 b on a.num < b.num and b.code = a.code
group by b.num, b.code
) AS a
*/

UPDATE #table1
SET code = b.code
from #table1 a
inner join
(select a.num, CHAR(ASCII(LEFT(a.code,1))+(a.num-a.a_num))+SUBSTRING(a.code, 2, 7) as code
from
(select b.num, b.code, min(a.num) as a_num
from #table1 a
inner join #table1 b on a.num < b.num and b.code = a.code
group by b.num, b.code
) AS a
) AS b ON a.num = b.num

select * from #table1

drop table #table1


ЗЫ
При пропуске значеня в Num предложенный код будет также делать пропуски, т.е

1,A0000001 -->> 1,A0000001
3,A0000001 -->> 3,С0000001
...
Рейтинг: 0 / 0
19.03.2002, 11:50
    #32025692
Andrei
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мне надо написать?
Большое спасибо!!!
...
Рейтинг: 0 / 0
19.03.2002, 11:58
    #32025694
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как мне надо написать?
А так будет работать даже с пропусками в Num


create table #table1(num int not null, code char(8 ) not null)
insert #table1 values(1, 'A0000001')
insert #table1 values(3, 'A0000001')
insert #table1 values(5, 'A0000001')
insert #table1 values(6, 'A0000003')

UPDATE #table1
SET code = b.code
from #table1 a
inner join
(select a.num, CHAR(ASCII(LEFT(a.code,1))+a.a_num)+SUBSTRING(a.code, 2, 7) as code
from
(select b.num, b.code, COUNT(a.num) as a_num
from #table1 a
inner join #table1 b on a.num < b.num and b.code = a.code
group by b.num, b.code
) AS a
) AS b ON a.num = b.num

select * from #table1

drop table #table1
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как мне надо написать? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]