Нумерация групп и записей в группе.
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Нумерация групп и записей в группе. Expand / Collapse
Автор
Сообщение
05.01.2007 18:08
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Добрый день, уважаемые мастера 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

Заранее большое спасибо за помощь!

Сообщ. #909425
09.01.2007 12:02
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Вобщем сделал в цикле через While. Конечно это не один запрос, но зато работает. :))
Сообщ. #909468
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 2:36