Генерировать токен каждые 10 записей
От: corpse56  
Дата: 25.11.15 16:49
Оценка:
Здравствуйте!

MS SQL 2008

Хочется генерировать новую некую метку для каждых следующих 5 записей.
как генерировать известно. Мне непонятно как можно с помощью запроса добиться этого.


например:
есть таблица с одним полем ID
ID
---
1
2
3
4
5
6
7
8
9
10
11
12

хочется с помощью select получить так:
ID     CURRENT       
---------------
1       token1         
2       token1         
3       token1         
4       token1         
5       token1         
6       token2         
7       token2         
8       token2         
9       token2         
10      token2         
11      token3         
12      token3

Скорее всего надо использовать рекурсивный запрос каким-то образом. я никак не соображу как.
Поиском искал, но похожих задач не встречал.
Re: Генерировать токен каждые 10 записей
От: Olaf Россия  
Дата: 25.11.15 17:43
Оценка: 3 (1)
Здравствуйте, corpse56, Вы писали:

C>Хочется генерировать новую некую метку для каждых следующих 5 записей.

C>как генерировать известно. Мне непонятно как можно с помощью запроса добиться этого.

C>например:

C>...
C>хочется с помощью select получить так:
C>...
C>Скорее всего надо использовать рекурсивный запрос каким-то образом. я никак не соображу как.
C>Поиском искал, но похожих задач не встречал.

Не обязательно использовать рекурсивный запрос. Здесь помогут оконные функции. Шаг вынес в переменную, т.к. в теме у вас 10, а в сообщении 5 записей.
-- Шаг
declare @k int = 5

;with cte as
(
    select * 
    from (values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) a(n)
)
select *, 'token' + cast(((row_number() over(order by id) - 1) / @k) + 1 as varchar(20)) as [current]
from
(
    select t1.n + t2.n * 10 + t3.n * 100 + 1 as id
    from cte t1, cte t2, cte t3
) a
order by a.id
Re[2]: Генерировать токен каждые 10 записей
От: corpse56  
Дата: 25.11.15 18:06
Оценка:
Здравствуйте, Olaf, Вы писали:

O>select *, 'token' + cast(((row_number() over(order by id) — 1) / @k) + 1 as varchar(20)) as [current]



Спасибо!
мне стыдно. следовало самому догадаться...
Re: Генерировать токен каждые 10 записей
От: MasterZiv СССР  
Дата: 26.11.15 11:18
Оценка:
Здравствуйте, corpse56, Вы писали:

C>Скорее всего надо использовать рекурсивный запрос каким-то образом. я никак не соображу как.



GenToken( id / 5 )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.