Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как написать select чтобы в результате получилось 365(366) записей с датами текущего года?  [new]
Integrator2
Member

Откуда: Ленинградская область
Сообщений: 128
Есть такая задача - вставить записи в таблицу-календарь tblSchedule с полями ID, CalendarDate, Notes в количестве 365 (или 366) для заданного года (например, для текущего) так, чтобы в поле CalendarDate появились все даты.
Хочется сделать это несколькими инструкциями SQL, разделенными точкой с запятой.
Написал первую инструкцию:
INSERT INTO tblSchedule (Notes) SELECT TOP 366 1 FROM tblOtherTableWithRecords
А что вот дальше делать пока еще думаю... не поможете вариантами решения?
Почему именно таким способом (ряд инструкций, а не TSQL)?
-Нужно чтобы все работало также под Microsoft Access.

Заранее спасибо.
29 дек 12, 16:51    [13706331]     Ответить | Цитировать Сообщить модератору
 Re: Как написать select чтобы в результате получилось 365(366) записей с датами текущего года?  [new]
aleks2
Guest
;with
votvedhren as (
 select 0 as [day]
 union all
 select votvedhren.[day]+1 as [day]
 from votvedhren
 where votvedhren.[day]<364
 )
 select CAST('20120101' as datetime) + [day] from votvedhren
29 дек 12, 17:07    [13706403]     Ответить | Цитировать Сообщить модератору
 Re: Как написать select чтобы в результате получилось 365(366) записей с датами текущего года?  [new]
Integrator2
Member

Откуда: Ленинградская область
Сообщений: 128
Понятно, надо прибавлять единицу к дате.
Ваш вариант в AccessSQL работать не будет, или я не прав?
А хочется универсально. А, если так?
1. Пишем 366 записей в поле Notes - единицы
2. Превращаем единицы в порядковые номера
3. Записываем в поле CalendarDate GETDATE + порядковый номер из поля Notes.
29 дек 12, 17:27    [13706496]     Ответить | Цитировать Сообщить модератору
 Re: Как написать select чтобы в результате получилось 365(366) записей с датами текущего года?  [new]
aleks2
Guest
Ты проводишь конкурс на самый замороченный способ?
29 дек 12, 17:41    [13706593]     Ответить | Цитировать Сообщить модератору
 Re: Как написать select чтобы в результате получилось 365(366) записей с датами текущего года?  [new]
Integrator2
Member

Откуда: Ленинградская область
Сообщений: 128
Я согласен, что в коде, с циклами и переменными все будет гораздо проще.
Но меня давно мучает вопрос, как добавлять даты и дату со временем в таблицы-календари чистым SQL-ом.
Может, какие-то комбинации с GROUP BY или IIF (CASE WHEN в T-SQL), может вложенные запросы или алиасы той же таблицы, может еще что...
Это задачка еще простая, на следующем шаге понадобится добавлять дату вместе со временем, чтобы время шло каждый час или каждые 20 минут...
Ряд последовательных SQL-инструкций, разделенных точкой с запятой, мне кажется хорошим универсальным решением без привязки к особенностям СУБД.
29 дек 12, 18:05    [13706693]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить