我正在为我的业务编写一个日期维度表,包括您的标准日期度量以及假日。我想补充的是一些重要的商业时期的标志,比如暑假(比如5/25-8/15 )。这很容易用设定的日期来完成,就像那些。然而,我想添加的一个句号是“狂欢节季节”。这从每年的01/06开始,但只在狂欢节之后结束,而狂欢节则是基于复活节的日期。这是一个复杂的计算,以至于我使用我在网上找到的函数将复活节和相关假日(包括Mardi Gras)添加到单独的假日维度中,然后将其与日期维度合并到Calendar视图中。
我想写一段代码,如果日期是01/06和那年狂欢节的日期,就会给出一个“是”的标志,但这真的让我很不爽。
我尝试了以下子查询:
MardiGrasFlag =
CASE
WHEN FORMAT([Date], 'MM/dd') BETWEEN '01/06' AND
(SELECT FORMAT(d.[Date], 'MM/dd')
FROM dbo.DateDimension AS d
LEFT JOIN dbo.HolidayDimension AS h ON d.[Date] = h.[Date]
WHERE [Holiday Text] = 'Mardi Gras') THEN 'YES'但是,这会产生一个错误(正如预期的那样),因为它会获得多个结果。我尝试过在查询中添加TOP 1,但是它总是使用表中的第一个Mardi Gras日期。我需要的东西,检查日期在有关的年份,并使用狂欢节的日期为同一年,但无法确定它。
发布于 2022-11-23 12:03:27
你不只是想要每年马迪格拉斯时期的最高日期吗?此外,我认为您需要使用相关的子查询,例如:
UPDATE dbo.DateDimension d
set d.MardiGrasFlag =
CASE
WHEN FORMAT(d.[Date], 'MM/dd') BETWEEN '01/06' AND
(SELECT MAX(FORMAT(h.[Date], 'MM/dd'))
FROM dbo.HolidayDimension AS h ON
FORMAT(d.[Date], 'YYYY') = FORMAT(h.[Date], 'YYYY')
AND h.[Holiday Text] = 'Mardi Gras'
)
THEN 'YES' ELSE 'NO' ENDhttps://stackoverflow.com/questions/74536728
复制相似问题