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

Откуда:
Сообщений: 68
Необходимо получить номер группы - поле GR.
Можно ли проще?
Недостаток этого кода:
1) используется временная таблица #t2
2) номер группы с "пропусками"

create table #t1 (rid int identity,
	a 	varchar(120),
	b	int
	);
go
insert into #t1 (a,b) values ('aaa', 20);
insert into #t1 (a,b) values ('aaa', 21);
insert into #t1 (a,b) values ('bbcd3', 22);
insert into #t1 (a,b) values ('aaa', 23);
insert into #t1 (a,b) values ('aaa', 24);
insert into #t1 (a,b) values ('ddee408', 25);
insert into #t1 (a,b) values ('aaa', 26);
insert into #t1 (a,b) values ('FFF', 27);
insert into #t1 (a,b) values ('HHHKK', 28);
insert into #t1 (a,b) values ('aaa', 29);
insert into #t1 (a,b) values ('aaa', 30);
insert into #t1 (a,b) values ('aaa', 31);
insert into #t1 (a,b) values ('bbcd3', 32);
insert into #t1 (a,b) values ('aaa', 34);
insert into #t1 (a,b) values ('aaa', 36);
insert into #t1 (a,b) values ('ddee408', 425);
insert into #t1 (a,b) values ('aaa', 520);
insert into #t1 (a,b) values ('FFF', 720);
insert into #t1 (a,b) values ('HHHKK', 420);
insert into #t1 (a,b) values ('aaa', 550);
go


SELECT rid=identity(int,1,1), oldrid=CAST(rid as int), a, b
, [rank] = Row_Number() OVER (PARTITION BY a ORDER BY b DESC)  
into #t2
FROM #t1 t
go

select *, GR=rid-[rank] + 1 from #t2

go
22 июн 09, 18:33    [7330272]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо получить номер группы  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
а соседние такие же функции глянуть? там есть, которые ранжируют.

для спящего время бодрствования равносильно сну
22 июн 09, 18:37    [7330287]     Ответить | Цитировать Сообщить модератору
 Re: Необходимо получить номер группы  [new]
papa1
Member

Откуда:
Сообщений: 68
Алексей2003
а соседние такие же функции глянуть? там есть, которые ранжируют.

для спящего время бодрствования равносильно сну


Спасибо!

Получилось
SELECT rid, a, b
, [rank] = Row_Number() OVER (PARTITION BY a ORDER BY b DESC)  
, DENSE_RANK() OVER (ORDER BY a) AS 'Dense Rank'
FROM #t1 t
go
22 июн 09, 19:02    [7330357]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить