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

Откуда:
Сообщений: 8
SQL SERVER 2012

Существует таблица занесенная с помощью импорта данных:
а
b
c
d
a
b
c
a
b
c
е


Возможно ли пронумеровать ее по группам. Так чтобы номер группы был рядом с каждым параметрам. Новая группа начинается со строки 'a'. количество наименований в группах всегда разное.

Как должно в итоги выглядеть:

1 а
1 b
1 c
1 d
2 a
2 b
2 c
3 a
3 b
3 c
3 е


Все голову изломал, помогите пожалуйста
5 май 14, 21:17    [15976199]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
iap
Member

Откуда: Москва
Сообщений: 47086
MrTrifonov,

сервер должен постоянно смотреть на Вашу картинку, чтобы понять,
в каком порядке следуют исходные данные?

Рискуете доломать свою голову при такой постановке.
5 май 14, 21:30    [15976224]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
MrTrifonov
Member

Откуда:
Сообщений: 8
iap,

Сервер принимает информацию через импорт данных из таблицы excel.
в данной таблицы параметр 'а' означает начало следующей подгруппы. Количество параметров подгруппы, отличные от 'а', от 1 до 20 . Пронумеровав через row_number, я могу только определить № строки параметра 'а'. А как сделать так что бы все остальные параметры подгруппы принимали значение соответствующее его группе??

П.С. Так же, не знаю нужно ли это, между подгруппами нету ни каких разделителей.
6 май 14, 02:04    [15976867]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
kalakhary
Member

Откуда:
Сообщений: 17
если я правильно понимаю, то можно попробовать как-то так
create table #t (id int identity, a varchar(1))
insert into #t values('a')
insert into #t values('b')
insert into #t values('c')
insert into #t values('d')
insert into #t values('a')
insert into #t values('b')
insert into #t values('c')
insert into #t values('a')
insert into #t values('b')
insert into #t values('c')
insert into #t values('e')
insert into #t values('f')
insert into #t values('g')

select rank() over(partition by a order by a, id) as gr,  * into #r from #t order by id

select top 1 gr, a from #r
union
select case when r1.gr=1 and r1.a<>'a' then (select max(gr) from #r where #r.id<r1.id) else r1.gr end num, r1.a 
from #r r1, #r r2 where (r1.id = r2.id+1 )
order by 1

drop table #t 
drop table #r
6 май 14, 05:21    [15976945]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
kalakhary
Member

Откуда:
Сообщений: 17
Хотя, конечно, лучше через join
select case when r1.gr=1 and r1.a<>'a' then (select max(gr) from #r where #r.id<r1.id) else r1.gr end num, r1.a 
from #r r1
left join #r r2 on r1.id = r2.id+1
6 май 14, 05:38    [15976948]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
Wlr-l
Member

Откуда:
Сообщений: 541
Может так:

create table #t (id int identity primary key, a varchar(1))
insert #t values('a'),('b'),('c'),('d'),
                ('a'),('b'),('c'),
                ('a'),('b'),('c'),('e'),('f'),('g');

select sum(case when a='a' then 1 else 0 end) over (order by id) as gr,
       a
  from #t;

drop table #t




gr a
1 a
1 b
1 c
1 d
2 a
2 b
2 c
3 a
3 b
3 c
3 e
3 f
3 g
6 май 14, 18:03    [15981925]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
user89
Member

Откуда:
Сообщений: 2083
Для 2008 немного сложнее... Но тоже за один проход по таблице
declare @t table (id int identity primary key, a varchar(1))
insert @t values('a'),('b'),('c'),('d'),('e'), ('a'),('b'),('c'),
('a'),('b'),('c'),('e'),('f'),('g');

select *, case when a = 'a' then row_number() over(partition by case when a = 'a' then 1 else 0 end order by id)
else id - row_number() over(partition by case when a = 'a' then 1 else 0 end order by id) end [gr]
from @t
order by id

idagr
1a1
2b1
3c1
4d1
5e1
6a2
7b2
8c2
9a3
10b3
11c3
12e3
13f3
14g3
6 май 14, 22:34    [15982873]     Ответить | Цитировать Сообщить модератору
 Re: нумерация по группам  [new]
MrTrifonov
Member

Откуда:
Сообщений: 8
Огромное спасибо всем за помощь!!
6 май 14, 23:06    [15982984]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить