Расчет субботы и воскресенья Бизнес Дата, когда пятница или понедельник являются выходными
Я работаю над генератором календаря в MS SQL 2008 и мне нужно создать правильный рабочий день для каждого дня в месяце. Все работает с этим исключением: если пятница или понедельник - выходной, я получаю ошибочное значение для бизнес-дат на эти выходные (суббота и воскресенье). У меня уже есть столбец, который возвращает значение 1, если понедельник (MHDY) является выходным, а также отдельный столбец для пятницы (FHldy), и я пытаюсь сделать это, присвоить значение 1 в MHDY и FHldy. столбцы для субботы и воскресенья, если пятница до или понедельник после выходных. Вот часть кода, которая производит значения, упомянутые выше:
SELECT
MC.[Date]
,MC.[Year]
,MC.[Quarter]
,MC.[Month]
,MC.[Week]
,MC.[Day]
,MC.[DayOfYear]
,MC.[Weekday] -- This has first day of week as Monday
,MC.[KindOfDay]
,MC.[Description]
,CASE WHEN Weekday BETWEEN 1 and 6 THEN Weekday +1
WHEN Weekday = 7 THEN 1 END AS [DayofWeek]
-- This will convert first day of week to Sunday
, CASE WHEN MC.KindOfDay = 'Holiday' THEN 1 ELSE 0 END AS Holiday
, CASE WHEN MC.KindOfDay <> 'BusDay' THEN 1 ELSE 0 END AS NonBDay
, CASE WHEN MC.KindOfDay = 'BusDay' THEN 1 ELSE 0 END AS BDay
, CASE WHEN MC.KindOfDay = 'Holiday' AND MC.Weekday = 1 THEN 1 ELSE 0 END AS MHDY
, CASE WHEN MC.Date = DateAdd(Month, 1, MC.Date - Day(MC.Date) + 1) -1 THEN 1 ELSE 0 END AS LDoM
, CASE WHEN MC.KindOfDay = 'Holiday' AND MC.[Weekday] = 5 THEN 1 ELSE 0 END AS FHldy
INTO #AllC2
FROM #MasterCal MC
В календаре гораздо больше кода, чем в этой части, но я пытаюсь добавить эту информацию.
Есть ли способ изменить заявление CASE, сказав: "Если понедельник - выходной, верните значение 1 для субботы и воскресенья в MHDY". То же самое относится и к пятницам.
Так близко... это последнее препятствие. Я ценю любую помощь, которую вы можете предложить.
1 ответ
Решение проблемы оказалось простым. Я добавил строки в оператор CASE в таблице #MasterCal, чтобы пометить выходные перед выходными в понедельник как выходные в поле KindOfDay. Я добавил строки в следующем разделе, чтобы сообщить, какую дату назначить для тех выходных, которые были отмечены как праздники. Задача решена.