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

Откуда:
Сообщений: 1066
Здравствуйте.
Помогите написать запрос одним селектом...вроде как есть что то подобное в конструкции Over, но не догоняю как правильно написать.
Есть запрос:
declare @t table (id int,vr int)
insert into @t(id,vr) values(1,1),(2,1),(3,2),(4,1),(5,1)

idvr
11
21
32
41
51


цель получить на выходе такого вида данные:
idvrnewfield
111
211
322
413
513


тоесть если меняется значение поля vr, в поле newfield ставить следующее значение..


Спасибо.
5 сен 16, 15:17    [19629174]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
select id,vr
,sum(n) over(order by id)+1 newfield
from(
select *
,case when vr = isnull(lag(vr) over(order by id),vr) then 0 else 1 end n
from @t
) a
5 сен 16, 16:22    [19629563]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
declare @t table (id int,vr int)
insert into @t(id,vr) values(1,1),(2,1),(3,2),(4,1),(5,1);

WITH
 T AS(SELECT N=ROW_NUMBER()OVER(ORDER BY id)-ROW_NUMBER()OVER(PARTITION BY vr ORDER BY id),* FROM @t)
,U AS(SELECT v=MIN(id)OVER(PARTITION BY N),* FROM T)
SELECT id,vr=DENSE_RANK()OVER(ORDER BY v)
FROM U
ORDER BY id;
5 сен 16, 16:29    [19629607]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить