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

Откуда:
Сообщений: 162
Здравствуйте!

Подскажите, пожалуйста, как можно сделать так:

Есть скриптик:
declare @tbl table (id int)
insert @tbl select 1 
insert @tbl select 2 
insert @tbl select 3 
insert @tbl select 1 
insert @tbl select 2 

SELECT id, CONVERT(VARCHAR,(id )) + '/' + RIGHT(MONTH(dateadd(mm,0,GETDATE())), 2) + '/' + RIGHT(YEAR(GETDATE()), 4) FROM @tbl


Сейчас выводится так:
1	1/10/2016
2	2/10/2016
3	3/10/2016
1	1/10/2016
2	2/10/2016


А вывод должен быть так:

1	1/10/2016
2	2/10/2016
3	3/10/2016
1	1/11/2016
2	2/11/2016



Т.е., когда начинается новая группа цифр (1,2, и т.д.), должен меняться месяц на следующий.
Буду очень благодарен за помощь!!!
13 окт 16, 16:40    [19778556]     Ответить | Цитировать Сообщить модератору
 Re: Небольшой запрос  [new]
кролик-зануда
Guest
Rusich2012,

а чем у вас гарантирован именно такой порядок записей?
только не говорите, что порядком вставки.
13 окт 16, 16:54    [19778626]     Ответить | Цитировать Сообщить модератору
 Re: Небольшой запрос  [new]
buven
Member

Откуда:
Сообщений: 792
Rusich2012
Т.е., когда начинается новая группа цифр (1,2, и т.д.),


А кто нам тут будет гарантировать, что группа цифр начнется? Select без order by выдает данные с случайной сортировкой. То что у вас в примере все получилось красиво - простое "везение".
Для однозначности чего-то не хватает имхо.
13 окт 16, 16:56    [19778633]     Ответить | Цитировать Сообщить модератору
 Re: Небольшой запрос  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
Если по порядку вставки, то так можно

declare @tbl table (n int identity,id int)
insert @tbl(id) select 1 
insert @tbl(id) select 2 
insert @tbl(id) select 3 
insert @tbl(id) select 1 
insert @tbl(id) select 2 

select id
,CONVERT(VARCHAR,(id )) + '/' + RIGHT(MONTH(dateadd(mm,sum(s) over(order by n),GETDATE())), 2) + '/' + RIGHT(YEAR(GETDATE()), 4) 
from(
SELECT id,n
,case when id - lag(id) over (order by n)<> 1 then 1 else 0 end s
FROM @tbl
) a
13 окт 16, 17:16    [19778742]     Ответить | Цитировать Сообщить модератору
 Re: Небольшой запрос  [new]
Rusich2012
Member

Откуда:
Сообщений: 162
Да, видимо, группа нужна:

declare @tbl table (id int, group int)
insert @tbl select 1, 1
insert @tbl select 2, 1 
insert @tbl select 3, 1
insert @tbl select 1, 2 
insert @tbl select 2, 2 


А как тогда с таким вариантом? Можно это сделать циклом или курсором, а можно ли в запросе?
13 окт 16, 17:18    [19778756]     Ответить | Цитировать Сообщить модератору
 Re: Небольшой запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31978
Rusich2012
А как тогда с таким вариантом?
Ну, тут просто эту группу используете в dateadd для формирования месяца.
13 окт 16, 17:24    [19778794]     Ответить | Цитировать Сообщить модератору
 Re: Небольшой запрос  [new]
Rusich2012
Member

Откуда:
Сообщений: 162
Точно! Спасибо!!!

alexeyvg
Rusich2012
А как тогда с таким вариантом?
Ну, тут просто эту группу используете в dateadd для формирования месяца.
13 окт 16, 17:35    [19778827]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить