我尝试使用给定1或0的预定义INT值作为工作日,或者不计算滚动工作日序列。我尝试了很多不同的代码,并在此处签出了不同的文章,但没有一个具体的足以与我的一起工作。
预定义的INT值是“ business_day_flag_int”。这是通过转换计算得到的,给我“ day_business_day_flag”(有点值)。当前,周六/周日和银行假日为“ day_business_day_flag”触发0,而周一至周五为非假日则将其设为1。
如何使它在可以添加到表生成文件其余部分的更新表中工作?如果需要更多信息,请告诉我。
我已经尝试过对这里的内容进行一系列不同的更改和变化。如果删除日期值,它将为我提供大约12600个工作日列中所有行的整数值。如果我使用日期范围,它会给我
DECLARE @StartDate DATETIME = '01/01/2000' --Starting value of Date Range
DECLARE @EndDate DATETIME = '01/01/2050' --End Value of Date Range
DECLARE
@DayOfWeekInMonth INT,
@DayOfWeekInYear INT,
@DayOfQuarter INT,
@WeekOfMonth INT,
@CurrentYear INT,
@CurrentMonth INT,
@CurrentQuarter INT
DECLARE @CurrentDate AS DATETIME = @startDate
SET @CurrentMonth = DATEPART(MM, @CurrentDate)
SET @CurrentYear = DATEPART(YY, @CurrentDate)
SET @CurrentQuarter = DATEPART(QQ, @CurrentDate)
UPDATE [EDW_MDM].[dbo].[CALENDAR_DIM] SET
business_day_flag_int = Convert(INT, day_business_day_flag)
UPDATE [EDW_MDM].[dbo].[CALENDAR_DIM] SET
rolling_business_day_sequence = (SELECT count(business_day_flag_int) FROM [EDW_MDM].[dbo].[CALENDAR_DIM]
WHERE business_day_flag_int = 1 and
day_date between @StartDate and @CurrentDate)
我希望“ rolling_business_day_sequence”列按顺序计算过去的工作日。例如第1行= 1,第2行= 2,依此类推。直到日历结束。
更新1:将代码行编辑为
UPDATE [EDW_MDM].[dbo].[FCFCU_CALENDAR_DIM] SET
rolling_business_day_sequence = datediff(day,@StartDate,day_date) WHERE day_business_day_flag = 1
这使我可以对天进行计数,并在没有day_busienss_day_flag = 1的情况下将rolling_business_day_sequence行值设置为null,并且仍对其进行计数而不是不对其进行计数。我如何使其不增加日期?
答案 0 :(得分:4)
请考虑您的WHERE
条件下的窗函数求和,以累计计算指定日期范围内的business_day_flag_int = 1
的所有实例。但是,要在UPDATE
中使用窗口函数,需要CTE或子查询。
WITH CTE AS
(
SELECT ID, SUM(CASE WHEN day_date BETWEEN @StartDate AND @CurrentDate
AND business_day_flag_int = 1
THEN 1
ELSE 0
END) OVER (ORDER BY day_date) AS running_sequence
FROM [EDW_MDM].[dbo].[CALENDAR_DIM]
)
UPDATE t
FROM [EDW_MDM].[dbo].[CALENDAR_DIM] t
JOIN CTE ON t.ID = CTE.ID
SET t.rolling_business_day_sequence = CTE.running_sequence