SQL忽略嵌套大小写
我正在创建一个日期维度,但有一个问题,我必须定义“lastworkingdayofmonth”,并在其上设置一个标志 我可以应付所有的日子,但如果是假日,我就不能在前一天挂国旗了 请帮帮我:)SQL忽略嵌套大小写,sql,sql-server-2008,case,Sql,Sql Server 2008,Case,我正在创建一个日期维度,但有一个问题,我必须定义“lastworkingdayofmonth”,并在其上设置一个标志 我可以应付所有的日子,但如果是假日,我就不能在前一天挂国旗了 请帮帮我:) 我认为这样的事情可能适合你: UPDATE dd SET ISLASTWORKINGDAYMONTH = 1 FROM DATE_DIMENSION_001 dd left join DATE_DIMENSION_001 dd_anti on DA
我认为这样的事情可能适合你:
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
、左连接和WHERE
子句中的null
检查)我们无法找到同一个月的另一行,但找到的是更晚的日期,这也是一个工作日,而不是假日。您的预期输出是什么?您现在得到了什么?我想在这里注意的一点是,您没有处理案例陈述的其他部分。如果在case-when语句中正确处理Else部分,这将是代码安全的一面。我想在“Islastworkingday”列上设置标志10年来,我得到117个月,我应该得到120个月,其他3个月是在我的研究假期之后,所以嵌套案例应该检查这一点,但不知何故,它被忽略了,我认为它无法工作,它只是在2019年设置了1个月,而在2010年和2018年之间没有设置为什么?@SerkanArslan-啊,哎呀。我们还应该在连接条件中进行年测试。我将在.thx中编辑它现在工作正常:)我很高兴thx兄弟:D@Damien_不信者你知道我如何对季度做同样的事情吗?我可以每月换一个季度吗?@SerkanArslan-DATEPART
也可以返回季度,因此你可以替换检查“同一个月”的行:DATEPART(month,dd.FullDate)=DATEPART(month,dd_anti.FullDate)
其中一个表示“同一季度”:DATEPART(quarty,dd.FullDate)=DATEPART(quarty,dd_anti.FullDate)
。是的,改为quarty回答了我上面的问题,我想再次感谢您的代码,它做了大量工作:)
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