我创建了一个Date_Dimension并且遇到了我必须定义的问题" lastworkingdayofmonth"在上面设置一个标志。
我可以处理所有的日子,但是当计算出它们是假日时我不能在前一天设置标志。
请帮帮我:)。
UPDATE DATE_DIMENSION_001
SET ISLASTWORKINGDAYMONTH =
CASE WHEN ( CONVERT(VARCHAR(8), lastdayofmonth, 112) = Datekey ) AND IsWeekday = 1 AND IsHolidayAut = 0 THEN 1
WHEN ( CONVERT(VARCHAR(8), dbo.fn_LastWorkday(FullDate), 112) ) = Datekey AND IsHolidayAut = 0 THEN 1
WHEN ( CONVERT(VARCHAR(8), dbo.fn_LastWorkday(FullDate), 112) ) = Datekey AND IsHolidayAut = 1 THEN
CASE WHEN ( DATEADD(DD, -1, dbo.fn_LastWorkday(FullDate)) ) = CONVERT(DATE, Datekey) THEN 1
END
END
答案 0 :(得分:0)
我认为这样的事可能适合你:
UPDATE dd
SET ISLASTWORKINGDAYMONTH = 1
FROM
DATE_DIMENSION_001 dd
left join
DATE_DIMENSION_001 dd_anti
on
DATEPART(year,dd.FullDate) = DATEPART(year,dd_anti.FullDate) and
DATEPART(month,dd.FullDate) = DATEPART(month,dd_anti.FullDate) and
dd_anti.FullDate > dd.FullDate and
dd_anti.IsWeekday = 1 and
dd_anti.IsHolidayAut = 0
WHERE
dd.IsWeekday = 1 and
dd.IsHolidayAut = 0 and
dd_anti.FullDate is null
也就是说,我们找到了工作日而不是假期的行,并且(通过dd_anti
,LEFT JOIN
和null
检查WHERE
子句中的行我们找不到同一个月的另一行,但是以后的日期,也是工作日,而不是假期。