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

Откуда:
Сообщений: 47
Помогите плиз пронумировать строки:
имеется таблица:
create table #t
	(a varchar (50),
	b  varchar (50),
	c  varchar (50),
	id int null)

insert into #t(a,b,c) 
(select '1','aa','sasasa'
union all select '2','bb','gsgfs'
union all select '2','bb','gsgfs'
union all select '1','aa','sasasa'
union all select '2','bb','gsgfs'
union all select '3','cc','sssss'
union all select '2','bb','gsgfs'
union all select '2','bb','gsgfs'
union all select '3','cc','sssss'
union all select '2','bb','gsgfs'
union all select '2','bb','gsgfs'
union all select '4','bb','gsgfs'
)

необходимо пронумировать строки от 1 и до... в каждой группе
Т.е. для всех срок где a=2, b=bb,c= gsgfs должно быть ID=1,2,3... для следующей группы опять нумирация строк начинается с 1

Спасибо! чего-то я не правильно с курсором делаю :(
17 авг 09, 12:58    [7545907]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Что-то с ходу не могу понять, что у Вас слово "группа" означает
Приведите, пожалуйста, желаемый результат для этих данных
И версию сервера укажите
17 авг 09, 13:04    [7545934]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Gogachka
Member

Откуда:
Сообщений: 47
Сорри что не корректно объяснил, группа, это где a,b,c одинковые
для данного примера должно быь так:
select * from #t
order by 1,2,3

abcid
1aa sasasa1
1aasasasa2
2bbgsgfs1
2bbgsgfs2
2bbgsgfs3
2bbgsgfs4
2bbgsgfs5
2bbgsgfs6
2bbgsgfs7
3ccsssss1
3ccsssss2
4bbgsgfs1
17 авг 09, 13:12    [7545994]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
select a, b, c
      ,row_number() over(partition by a, b, c order by (select 'не важно что')) as id
  from #t

a          b          c          id
---------- ---------- ---------- --------------------
1          aa         sasasa     1
1          aa         sasasa     2
2          bb         gsgfs      1
2          bb         gsgfs      2
2          bb         gsgfs      3
2          bb         gsgfs      4
2          bb         gsgfs      5
2          bb         gsgfs      6
2          bb         gsgfs      7
3          cc         sssss      1
3          cc         sssss      2
4          bb         gsgfs      1

(12 row(s) affected)
17 авг 09, 13:17    [7546021]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Gogachka
Member

Откуда:
Сообщений: 47
Паганель,

прошу прощения, не успел дописать, что речь идет о SQL2000
17 авг 09, 13:19    [7546031]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
alter table #t add id2 int identity(1, 1) not null
go
select a, b, c
      ,(select count(*)
          from #t as t2
         where t2.a = t1.a and t2.b=t1.b and t2.c = t1.c
           and t2.id2 <= t1.id2) as id
  from #t as t1
 order by a, b, c, id

a          b          c          id          
---------- ---------- ---------- ----------- 
1          aa         sasasa     1
1          aa         sasasa     2
2          bb         gsgfs      1
2          bb         gsgfs      2
2          bb         gsgfs      3
2          bb         gsgfs      4
2          bb         gsgfs      5
2          bb         gsgfs      6
2          bb         gsgfs      7
3          cc         sssss      1
3          cc         sssss      2
4          bb         gsgfs      1

(12 row(s) affected)
17 авг 09, 13:25    [7546053]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Gogachka
Member

Откуда:
Сообщений: 47
Паганель,

Спасибо огромное!

Т.е. для того, чтоб пронумировать строки, мне нужно добавить дополнительный ID2
и потом запустить:
update #t 
set id=(select count(*)
          from #t as t2
         where t2.a = t1.a and t2.b=t1.b and t2.c = t1.c
           and t2.id2 <= t1.id2) 
  from #t as t1
17 авг 09, 13:41    [7546140]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Gogachka
мне нужно добавить дополнительный ID2 и потом запустить...
да
17 авг 09, 13:44    [7546159]     Ответить | Цитировать Сообщить модератору
 Re: Группировка строк и нумирация  [new]
Gogachka
Member

Откуда:
Сообщений: 47
Паганель,

Так и сделал. Большое спасибо за помощь!
17 авг 09, 13:50    [7546211]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить