В SQL: кол-во битов в качестве подвижного последовательно
Я пытаюсь использовать свой битный столбец "day_business_day_flag" как способ подсчета скользящих рабочих дней в качестве другого значения "rolling_business_day_sequence". day_business_day_flag устанавливается для определения того, является ли день праздником, будним днем/выходным, и возвращает 1, если он не является праздником и не является выходным, и 0, если день является праздничным или выходным. Я пытаюсь установить rolling_business_day_sequence, чтобы либо добавить Предыдущее значение строки для него как своего рода функцию задержки, либо другой способ вычислить, сколько рабочих дней прошло до конкретной даты.
[rolling_day_sequence] = datediff(day,@StartDate,day_date)+1,Я использую это для подсчета нормальной последовательности скользящих дней. Это начинается с одного и каждый день добавляет еще одно число. Я хочу сделать то же самое с моей колонкой day_business_day_flag
day_business_day_flag-это битовое значение, которое возвращает 1, Если day_date не является выходным/нерабочим днем
rolling_business_day_sequence-это столбец, который я пытаюсь заполнить.
@startdate-01/01/2000
@enddate-это 12/31/2050
day_date-это дата строки, которая может находиться в любом месте между 2000-01-01 и 2050-12-31.
Дайте мне знать, если вам понадобится дополнительная информация, чтобы заставить это работать.
Я получаю "имя столбца или количество предоставленных значений не соответствует определению таблицы." Большую часть времени.
Что я уже пробовал:
Я попробовал это сделать
SELECT rolling_business_day_sequence = COUNT(day_business_day_flag) between @startdate and day_date --WHERE day_date >= @StartDate and day_date <= @EndDate AS rolling_business_day_sequence
Я тоже пытался
SELECT day_date, SUM(CASE WHEN day_business_day_flag = 1 then 1 else 0 END) AS rolling_business_day_sequence FROM CALENDAR_DIM group by day_date;
новая попытка
SELECT day_date, day_business_day_flag, count(day_business_day_flag) FROM CALENDAR_DIM as rolling_business_day_sequence where day_business_day_flag = 1 group by day_date, day_business_day_flag
INSERT INTO CALENDAR_DIM --SELECT SUM(CASE(day_business_day_flag) WHEN 1 THEN 1 ELSE 0 END) AS rolling_business_day_sequence FROM CALENDAR_DIM
INSERT INTO CALENDAR_DIM SELECT COUNT(NULLIF(day_business_day_flag,0)) AS rolling_business_day_sequence FROM CALENDAR_DIM
Новая попытка по состоянию на 3 апреля 2019 года
UPDATE [EDW_MDM].[dbo].[FCFCU_CALENDAR_DIM] SET business_day_flag_int = (SELECT CAST(day_business_day_flag AS INT) FROM FCFCU_CALENDAR_DIM), lag_rolling_business_day_sequence = (SELECT LAG(day_business_day_flag, 1) OVER (ORDER BY fcfcu_calendar_dim_id) FROM FCFCU_CALENDAR_DIM) UPDATE [EDW_MDM].[dbo].[FCFCU_CALENDAR_DIM] SET rolling_business_day_sequence = business_day_flag_int +lag_rolling_business_day_sequence
Я получаю ошибку "подзапрос вернул более 1 значения. Это недопустимо, когда подзапрос следует за=, !=, <, <= , >, >= или когда подзапрос используется в качестве выражения." Когда он запускается как свой собственный, я вижу, что day_date для 01/01/2000 повторяется примерно 200 раз, прежде чем перейти к 01/02/2000. Любые предложения будут очень оценены, потому что я чувствую, что близок к тому, что ищу.