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

Откуда:
Сообщений: 1062
Добрый день!

Погуглил, но не нашел ничего подходящего, но я думаю задача довольна тривиальная

Есть таблица с 1 полем ID всего 100 записей от 59345 до 59445

мне нужно пронумеровать по 9 записей т.е

1 59345
2 59346
3 59347
.
.
.
1 59354
1 дек 15, 12:10    [18496498]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
Glory
Member

Откуда:
Сообщений: 104751
кириллk
мне нужно пронумеровать по 9 записей т.е

Это легко получается, если вычислять отстаток от деления текущего номера на 9
1 дек 15, 12:14    [18496532]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
кириллk,

Ну для чистоты эксперимента
1 + (-1 + ROW_NUMBER() OVER (ORDER BY ID)) % 9
1 дек 15, 12:21    [18496587]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
кириллk
Member

Откуда:
Сообщений: 1062
a_voronin
кириллk,

Ну для чистоты эксперимента
1 + (-1 + ROW_NUMBER() OVER (ORDER BY ID)) % 9



Спасибо )). но печатался, я хотел так :

1 59345
1 59346
1 59347
.
.
.
2 59354
2 59355

Пытался сделать через ROW_NUMBER() OVER(PARTITION BY t2.GR ORDER BY t2.ID DESC) AS Row
1 дек 15, 12:49    [18496820]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
Glory
Member

Откуда:
Сообщений: 104751
кириллk
я хотел так :

А это получается, если вычислять целую часть от деления на 9.
1 дек 15, 12:51    [18496839]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
кириллk
Member

Откуда:
Сообщений: 1062
Glory
кириллk
я хотел так :

А это получается, если вычислять целую часть от деления на 9.


Сделал так floor((id-1)/9)
1 дек 15, 12:57    [18496869]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
кириллk
Member

Откуда:
Сообщений: 1062
кириллk,

Вылез косяк, когда ID удаляли, нумерация сбивается )))
и данные "плывут"
1 дек 15, 15:34    [18497993]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2415
кириллk,

вам же написали:
ROW_NUMBER()
1 дек 15, 15:41    [18498039]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
кириллk
Member

Откуда:
Сообщений: 1062
StarikNavy
кириллk,

вам же написали:
ROW_NUMBER()


Вот так вот

1 59345
1 59346
1 59347
.
.
.
2 59354
2 59355

row numer не сделать
1 дек 15, 15:48    [18498096]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
кириллk
Member

Откуда:
Сообщений: 1062
кириллk
StarikNavy
кириллk,

вам же написали:
ROW_NUMBER()


Вот так вот

1 59345
1 59346
1 59347
.
.
.
2 59354
2 59355

row numer не сделать


Пробую решить проблему созданием новых ID ников
1 дек 15, 15:49    [18498103]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Я дико извиняюсь, но что, никто про NTILE не вспомнил?

https://msdn.microsoft.com/en-us/library/ms175126.aspx
1 дек 15, 15:51    [18498112]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4902
Minamoto
Я дико извиняюсь, но что, никто про NTILE не вспомнил?

https://msdn.microsoft.com/en-us/library/ms175126.aspx


Я вот вспомнил, но она не даст нужного результата тут. Она делить на N групп, а тут надо поделить на группы по N штук
1 дек 15, 16:15    [18498225]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
a_voronin
Minamoto
Я дико извиняюсь, но что, никто про NTILE не вспомнил?

https://msdn.microsoft.com/en-us/library/ms175126.aspx


Я вот вспомнил, но она не даст нужного результата тут. Она делить на N групп, а тут надо поделить на группы по N штук


Ну так тогда ваш же код с минимальными правками:

select n, 1 + (-1 + ROW_NUMBER() OVER (ORDER BY n)) / 9 from  [dbo].[GetNums] (59345, 59445)


функцию из соседней темы взял.
1 дек 15, 16:44    [18498392]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
o-o
Guest
да он не пойми что нумерует, вот и косяки.
ну что за проблемы удалить и перенумеровать?
declare @t table (id int);

insert into @t 
select 59344 + number
from master..spt_values
where type = 'p' and number between 1 and 100;
 
delete @t
where id in (59346, 59347, 59350, 59352, 59359, 59360);

select id, ROW_NUMBER() over (order by id) as rn,
           ROW_NUMBER() over (order by id) / 9 + 1 as gr
from @t;


К сообщению приложен файл. Размер - 64Kb
1 дек 15, 16:51    [18498444]     Ответить | Цитировать Сообщить модератору
 Re: пронумеровать список  [new]
кириллk
Member

Откуда:
Сообщений: 1062
Всем большое спасибо!
1 дек 15, 16:55    [18498470]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить