Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вернуть 12 строк с месяцами текущего года  [new]
отстали от поезда
Guest
Сами мы не местные.. Знания в MSSQL ограничены.
Подскажите, как кратко и изящно вернуть 12 строк, с месяцами текущего года? Вместо
select cast(STR( YEAR(GETDATE()) ) as datetime) union
select dateadd(M,1,cast(STR( YEAR(GETDATE()) ) as datetime)) union
select dateadd(M,2,cast(STR( YEAR(GETDATE()) ) as datetime)) union
select dateadd(M,3,cast(STR( YEAR(GETDATE()) ) as datetime)) union
...
29 июн 11, 19:38    [10895738]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
отстали от поезда
Сами мы не местные.. Знания в MSSQL ограничены.
Подскажите, как кратко и изящно вернуть 12 строк, с месяцами текущего года? Вместо
select cast(STR( YEAR(GETDATE()) ) as datetime) union
select dateadd(M,1,cast(STR( YEAR(GETDATE()) ) as datetime)) union
select dateadd(M,2,cast(STR( YEAR(GETDATE()) ) as datetime)) union
select dateadd(M,3,cast(STR( YEAR(GETDATE()) ) as datetime)) union
...


Как вариант

with a(num) as 
( select 0 as num
union all
select num+1 from a where num<11
)
select  dateadd(M,num,cast(STR( YEAR(GETDATE()) ) as datetime)) from a 

29 июн 11, 19:42    [10895746]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
отстали от поезда
Подскажите, как кратко и изящно вернуть 12 строк, с месяцами текущего года?
Самое простое и изящное решение для сиквела и вообще для СУБД - хранить таблицу-календарь.
29 июн 11, 19:53    [10895763]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
отстали от поезда
Guest
Alexandr Kr.
Как вариант
...

Кул, спасибо!
29 июн 11, 21:12    [10895933]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
отстали от поезда,

А всё-таки, хранить таблицу-календарь - грамотнее. И быстрее отработает.
29 июн 11, 21:13    [10895941]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
отстали от поезда
Guest
Makar4ik, alexeyvg

Мне не очень хочется ввязываться в теологический спор :)
Давайте сойдемся на том, что мой разум охватить целиком величину и насущность проблемы, на данный момент, не способен :)
Тем не менее, спасибо за готовность помочь. Ваши ответы я, конечно, видел, и вполне вероятно, что когда-нибудь в будущем эта идея послужит основой для полного пересмотра картины мироздания в моей головой, ну или хотя бы поможет в другой, менее глобальной, но более насущной проблеме. Не подумайте, что я ерничаю.

Далее не с целью что-то отстаивать или, наоборот, кого-то убеждать, просто мысли вслух:

Структура таблицы какая? Месяц, год? Или Век, год, квартал, месяц, день, час, минута, секунда? Или делаем сразу мешок таблиц - одну для лет, вторую для месяцев, третью для часов и т.д.? От рождества Христова? До какого года вперед - до даты истечения purchase order или пока тщеславие позволяет?
Объекты универсальные и глобальные делаем, или каждый себе создает и по мере надобности?
Если универсальные - значит начинаем с расширения документа корпоративных стандартов, правильно? Где-то ведь нам надо прописать, что "для запросов вида ... необходимо использовать следующие предопределенные объекты с именами .. расположенные ..."? Потом мы создаем необходимые структуры, забиваем их данными, включаем в деплоймент-планы, строим тестеров чтобы они все проверили, пинаем DBA чтобы они это дело включили в свои планы и т.д.

Теперь главный вопрос: вы действительно верите, что мне хочется всем этим заниматься, только потому, что надо изменить один запрос, чтобы он выводил фиксированное кол-во строк? :)

Я примерно могу представить, откуда и зачем берутся date/time dimensions, но сильно подозреваю, что оно мне _в данный_ момент не надо.

Это я все к тому, что подобные советы, несомненно, полезны, но лучше их давать не абстрактно, а вполне конкретно, с отсылкой к стандартным объектам используемого программного обеспечния, либо со ссылкой на описание универсального решения, буде оно существует.
А то я наворочу чегонить своми волосатыми лапками, а с чистой совестью буду ссылаться на этот форум, мол, меня тут так научили

Еще раз, на всякий случай - никого не хотел обидеть, спасибо вам за помощь. Просто случился приступ графомании подкрепленный похмельной плавностью движений :)
29 июн 11, 22:29    [10896102]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
отстали от поезда, таблицу-календарь достаточно на ближайшие 100 лет. Ну если вы большой оптимист, то стопиисят.
Реализация может быть любая, ну хоть бы тупо перечисление всех дней за 100 лет с отметкой праздников, выходных, переносов всяких. Там же можно индексов навешать и прочих радостей нагородить, по желанию.
29 июн 11, 22:42    [10896146]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
Makar4ik
Member

Откуда: Когда-то были Лужки, а теперь Бордюр-Сити.
Сообщений: 2680
kDnZP,

да нет, всё проще...
Ему надо было 12 строк.
Он написал для этого запрос.
В принципе, так на так, то ли прочитать 12 строк из фиксированной таблицы, то-ли выдать при помощи union, то-ли извернуться так, чтобы сервак подольше думал. Можно и with использовать, и курсор, и табличную переменную... Не суть.

Просто тогда не очень понятно, зачем последний коммент был нужен.
У него в нем - столько вариантов реализации таблицы из 12-ти строк...
И с какими-то объектами еще...

Вот как например на сях пишут? Вот надо 12 месяцев - бабахаем массив, и работаем.
Зачем нам это генерить каждый раз? Вот он, массив, уже готовый.
А на MSSQL, это-таки само напрашивается... База данных, как-никак.
29 июн 11, 23:14    [10896228]     Ответить | Цитировать Сообщить модератору
 Re: Вернуть 12 строк с месяцами текущего года  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
отстали от поезда
Мне не очень хочется ввязываться в теологический спор :)
Тут не технологический спор, это вопрос идеологии разработки.

Ни в каком языке не расчитывают константы вместо их определения.

SQL - язык работы с множествами. Если вам нужно множество-константа, глупо её вычислять для использующей её математической операции.

отстали от поезда
Объекты универсальные и глобальные делаем, или каждый себе создает и по мере надобности?
По мере надобности, но есть и универсальные.
Универсальный объект - таблица с числами. С её помощью можно, в частности, и вашу задачу решить, очень полезная вещь.

отстали от поезда
Теперь главный вопрос: вы действительно верите, что мне хочется всем этим заниматься, только потому, что надо изменить один запрос, чтобы он выводил фиксированное кол-во строк? :)
Разумеется, для разовой модификации запроса часто проще вычислить константу, чем вносить изменения в модель данных.
29 июн 11, 23:21    [10896249]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить