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

Откуда:
Сообщений: 41
подскажите пожалуйста или подкиньте ссылку, где можно посмотреть на простую таблицу-календарь...как ее вообще реализовать ?
хотя бы даже на 1 месяц и все дни
16 янв 12, 17:49    [11913118]     Ответить | Цитировать Сообщить модератору
 Re: таблица-календарь  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31980
I3axoo
подскажите пожалуйста или подкиньте ссылку, где можно посмотреть на простую таблицу-календарь...как ее вообще реализовать ?
хотя бы даже на 1 месяц и все дни
Что тут подсказывать? Всего 2 варианта (в зависимости от целей создания такой таблицы):
1 - Поле типа date
2 - Поле типа date и целый ИД

Остальные поля в зависимости от бизнес-требований. Может присутствовать флаг "выходной день", номер недели от начала года, номер дня в неделе, номер дня от начала года, дата прописью и т.п.
16 янв 12, 17:57    [11913228]     Ответить | Цитировать Сообщить модератору
 Re: таблица-календарь  [new]
I3axoo
Member

Откуда:
Сообщений: 41
alexeyvg,

мне просто нужна табличка, где будут даты за 1 месяц
16 янв 12, 18:03    [11913286]     Ответить | Цитировать Сообщить модератору
 Re: таблица-календарь  [new]
user89
Member

Откуда:
Сообщений: 2083
I3axoo,

я как раз делаю календарь на 2012 год.
Качал отсюда:
http://plus63.ru/contact.htm

У нас формат такой:
if object_id ('SPK_Простой_Табель_Календарь', 'u') is not null drop table SPK_Простой_Табель_Календарь
go
Create table SPK_Простой_Табель_Календарь (Data datetime, WorkHours int)

WorkHours - рабочие часы. Где выходной, там = 0...
16 янв 12, 18:06    [11913313]     Ответить | Цитировать Сообщить модератору
 Re: таблица-календарь  [new]
user89
Member

Откуда:
Сообщений: 2083
I3axoo
alexeyvg,

мне просто нужна табличка, где будут даты за 1 месяц
Вам проще будет
16 янв 12, 18:07    [11913333]     Ответить | Цитировать Сообщить модератору
 Re: таблица-календарь  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31980
user89
У нас формат такой:
if object_id ('SPK_Простой_Табель_Календарь', 'u') is not null drop table SPK_Простой_Табель_Календарь
go
Create table SPK_Простой_Табель_Календарь (Data datetime, WorkHours int)


WorkHours - рабочие часы. Где выходной, там = 0...
То есть у вас по несколько записей за один день??? Или совместимость с старыми версиями?
16 янв 12, 18:10    [11913354]     Ответить | Цитировать Сообщить модератору
 Re: таблица-календарь  [new]
user89
Member

Откуда:
Сообщений: 2083
alexeyvg,
совместимость с старыми версиями. В нем хранится и 2010 год. Просто дописываем строки вида Дата - Рабочие часы

+ Вот файл за 2011 год
set nocount on
set dateformat dmy
set language russian

/*
if object_id ('SPK_Простой_Табель_Календарь', 'u') is not null drop table SPK_Простой_Табель_Календарь
go
Create table SPK_Простой_Табель_Календарь (Data datetime, WorkHours int)
go
*/

delete from SPK_Простой_Табель_Календарь where datepart(yy,data) = 2011

;with cte(num) as (
 select 0
 union all
 select num+1 from cte where num < (365+isdate(datename(year,getdate())+'0229')) - 1  /* Количество дней в текущем году минус 1, т.к. нумерацию начинаем с нуля */
)
insert into SPK_Простой_Табель_Календарь (Data, WorkHours)
 select dateadd(dd, num, '01.01.2011'), 8 from cte option (maxrecursion 0)


-- Выходные и праздники
update SPK_Простой_Табель_Календарь
set WorkHours = 0 
where (Data between '01.01.2011' and '10.01.2011')
or Data in   ('15.01.2011', '16.01.2011', '22.01.2011', '23.01.2011', '29.01.2011', '30.01.2011', '05.02.2011', '06.02.2011', '12.02.2011',
'13.02.2011', '19.02.2011', '20.02.2011', '23.02.2011', '26.02.2011', '27.02.2011', '06.03.2011', '07.03.2011', '08.03.2011', '12.03.2011',
'13.03.2011', '19.03.2011', '20.03.2011', '26.03.2011', '27.03.2011', '02.04.2011', '03.04.2011', '09.04.2011', '10.04.2011', '16.04.2011',
'17.04.2011', '23.04.2011', '24.04.2011', '30.04.2011', '01.05.2011', '02.05.2011', '07.05.2011', '08.05.2011', '09.05.2011', '14.05.2011',
'15.05.2011', '21.05.2011', '22.05.2011', '28.05.2011', '29.05.2011', '04.06.2011', '05.06.2011', '11.06.2011', '12.06.2011', '13.06.2011',
'18.06.2011', '19.06.2011', '25.06.2011', '26.06.2011', '02.07.2011', '03.07.2011', '09.07.2011', '10.07.2011', '16.07.2011', '17.07.2011',
'23.07.2011', '24.07.2011', '30.07.2011', '31.07.2011', '06.08.2011', '07.08.2011', '13.08.2011', '14.08.2011', '20.08.2011', '21.08.2011',
'27.08.2011', '28.08.2011', '03.09.2011', '04.09.2011', '10.09.2011', '11.09.2011', '17.09.2011', '18.09.2011', '24.09.2011', '25.09.2011',
'01.10.2011', '02.10.2011', '08.10.2011', '09.10.2011', '15.10.2011', '16.10.2011', '22.10.2011', '23.10.2011', '29.10.2011', '30.10.2011',
'04.11.2011', '05.11.2011', '06.11.2011', '12.11.2011', '13.11.2011', '19.11.2011', '20.11.2011', '26.11.2011', '27.11.2011', '03.12.2011',
'04.12.2011', '10.12.2011', '11.12.2011', '17.12.2011', '18.12.2011', '24.12.2011', '25.12.2011', '31.12.2011')


-- Сам календарь за 2011 год в удобочитаемом виде
select convert(varchar, Data, 104) [Дата], WorkHours from SPK_Простой_Табель_Календарь where datepart(yy,data) = 2011 order by Data


/******************** Дополнительно ********************/
-- Проверка на кол-во рабочих дней
select * from
(
 select isnull (isnull(datename(mm, Data), cast(datepart(qq, Data) as varchar(20)) + '-й квартал'), 'Год') [Месяц],  count(Data) [Раб. дни]
 from SPK_Простой_Табель_Календарь 
 where datepart(yy,data) = 2011 and WorkHours <> 0 group by datename(mm, Data), datepart(qq, Data)
 with cube having (grouping(datepart(qq, Data)) = 0)
 or (grouping(datename(mm, Data)) = 1)
) as t
pivot (sum([Раб. дни]) for [Месяц] in ([январь], [февраль], [март], [1-й квартал], [апрель], [май], [июнь], [2-й квартал], [июль], [август], [сентябрь],
[3-й квартал], [октябрь], [ноябрь], [декабрь], [4-й квартал], [Год])) as piv

-- Список выходных и праздничных дней
select convert(varchar, Data, 104) [Выходные и праздники] from SPK_Простой_Табель_Календарь where datepart(yy,data) = 2011 and WorkHours = 0
/*********************************************************/


Сейчас слегка переделываю (в новом файле) за 2012 год.
16 янв 12, 18:25    [11913459]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить