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

Откуда: Israel
Сообщений: 140
задача такая:
есть начальная дата работы, например 01/01/13 и интервал повторения этой работы - 7 дней.
Нужно создать виртуальный сет записей со всеми будущими датами этой работы до конца текущего года,
таких работ много и у каждой свой интервал в днях и свое начало.
стараюсь не создавать таблицу.
у кого какие мысли? спасибо
6 янв 13, 15:31    [13728912]     Ответить | Цитировать Сообщить модератору
 Re: создание вычисляемых строк  [new]
qwerty112
Guest
olga zobkov
задача такая:
есть начальная дата работы, например 01/01/13 и интервал повторения этой работы - 7 дней.
Нужно создать виртуальный сет записей со всеми будущими датами этой работы до конца текущего года,
таких работ много и у каждой свой интервал в днях и свое начало.
стараюсь не создавать таблицу.
у кого какие мысли? спасибо

"принципы" - это хорошо, но, имхо, не в этом случае ...
табличка "Календарь" часто "пригождается" :)

нуу, а если "не создавать таблицу" - то рекурсивный CTE / табл.чисел spt_values из master / "генератор" чисел из нескольких cross join-ов
6 янв 13, 15:49    [13728953]     Ответить | Цитировать Сообщить модератору
 Re: создание вычисляемых строк  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
qwerty112,

да вот сижу и думаю что все таки табличка будет самый простой и быстрый вариант с наименьшими затратами да и пригодится может в других отчетах спасибо
6 янв 13, 15:56    [13728967]     Ответить | Цитировать Сообщить модератору
 Re: создание вычисляемых строк  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28355
CREATE TABLE dbo.Works
(
  ID           INTEGER IDENTITY,
  Name         VARCHAR(60),
  Start        DATETIME,
  DayInterval  INTEGER
)
GO

INSERT INTO Works
SELECT 'Стирка', '20130105', 3
UNION ALL
SELECT 'Уборка', '20130103', 7
GO


WITH Schedule (WorkID, WorkName, WorkStart)
AS
(
  SELECT ID, Name, Start FROM Works
  UNION ALL
  SELECT WorkID, WorkName, DATEADD(D, DayInterval, WorkStart)
  FROM   Schedule
  JOIN   Works
      ON ID = WorkID
  WHERE  DATEADD(D, DayInterval, WorkStart) <= '20131231'
)
SELECT * FROM Schedule WHERE WorkName = 'Стирка' OPTION (MAXRECURSION 365)
GO

DROP TABLE dbo.Works
GO
6 янв 13, 16:34    [13729085]     Ответить | Цитировать Сообщить модератору
 Re: создание вычисляемых строк  [new]
olga zobkov
Member

Откуда: Israel
Сообщений: 140
skyANA,

спасибо за изящный ответ!
6 янв 13, 16:58    [13729140]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить