Здравствуйте!
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
Скорее всего надо использовать рекурсивный запрос каким-то образом. я никак не соображу как.
Поиском искал, но похожих задач не встречал.
Здравствуйте, 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