Добрый день, уважаемые мастера T-SQL программирования!Буду премного благодарен, если кто-то поможет мне решить эту проблему. Есть набор записей (таблица с ключевым полем), в котором кроме прочих есть два поля, в которые запросом на обновление заносятся значения соответственно - порядкового номера записи в группе (группировка записей из этой же таблицы по 3 другим полям) и порядковый номер самой группы. Пронумеровать записи в группах у меня вроде получилось, а вот проставить нумерацию групп ну никак не получается.
Вобщем чтобы сильно Вас не путать лучше приведу код скрипта ( файл почемуто не прицепился, страничка не открывается ):
Create table #Tmp_table
(
id_r int identity ( 1, 1 ), -- Ключевое поле временной таблицы
f_str int,
f_kat int,
f_typ int,
f_nam varchar(10),
f_num int,
f_ng int
)
-- Первая группа
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 1, 1, 'ABCD123' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 1, 1, 'ABCD333' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 1, 1, 'ABCD4454' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 2, 1, 'ABCD234rf' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 2, 1, 'AB3421`df' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 1, 3, 'sdfgsd34' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 1, 3, '123ref' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 1, 2, 3, 'asertfgh' )
-- Вторая группа
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 2, 1, 1, 'ABCD123' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 2, 1, 1, 'ABCD333' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 2, 2, 1, 'ABCD4454' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 2, 2, 1, 'ABCD234rf' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 2, 2, 1, 'AB3421`df' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 2, 1, 3, 'sdfgsd34' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
-- Третья группа
values ( 3, 1, 1, '123ref' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 1, 1, 'asertfgh' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 1, 1, 'ABCD123' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 1, 1, 'ABCD333' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 2, 1, 'ABCD4454' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 1, 1, 'ABCD234rf' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 1, 3, 'AB3421`df' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 1, 3, 'sdfgsd34' )
Insert Into #Tmp_table ( f_str, f_kat, f_typ, f_nam )
values ( 3, 2, 3, '123ref' )
Select * From #Tmp_table
-----------------------------------------------------------------------------------------
/*
Проставляем номер позиций (Нумерация работает, вопрос - можно ли в этом же запросе нумеровать группы.
Т.е. чтобы в поле f_ng было примерно следующее - 1
1
1
2
2
3
3 и т.д. ?)
*/
-----------------------------------------------------------------------------------------
Update #Tmp_table Set #Tmp_table.f_num = rank
From
(
select
test_1.f_str,
test_1.f_kat,
test_1.f_typ,
count(test_2.id_r) as rank,
test_1.id_r
from
#Tmp_table as test_1
inner join #Tmp_table as test_2 on ( test_1.id_r >= test_2.id_r )
and
( test_1.f_str= test_2.f_str )
and
( test_1.f_kat = test_2.f_kat )
and
( test_1.f_typ = test_2.f_typ )
group by test_1.f_str, test_1.f_kat, test_1.f_typ, test_1.id_r
) as t1
Where #Tmp_table.id_r=t1.id_r
-----------------------------------------------------------------------------------------
Select * From #Tmp_table
Drop Table #Tmp_table
Заранее большое спасибо за помощь!