带有HolidayFlag的日期范围之间的SQL大小写



我正试图在计划的跟进日中添加一个假期的跟进日。在这种情况下,7月1日是收费日期,应该在7月5日之前跟进,但在这种情况中,7月4日是跟进窗口,所以我需要调整跟进日期。规则:当收费日期是星期五,而星期一是假期时,我需要在后续时间中增加一天。

SELECT
c.*,
CASE
WHEN Date BETWEEN CONVERT(Date,c.chargeDateTime) AND c.[FollowUp] AND c.chargeDay='Friday' AND d.HolidayFlag ='Y' THEN DATEADD(DD,5,CONVERT(Date,c.chargeDateTime))  
ELSE c.[FollowUp]
END AS 'FollowUpAdjusted'
FROM Sales.Purchases AS c
LEFT JOIN Dim.Date AS d ON CONVERT(Date, c.chargeDateTime) = d.Date
ChargeIDchargeDateTimeFollowUpAdjusted
xxxxx2022-07-01 11:30:002022-07-05

我认为你的问题是你在收费日期加入日期表,但实际上你需要在你想检查是否是假日的周一加入。

也就是说,你的规则看起来很奇怪。只有在星期五收费,而星期一是假期,你才能多拿一天?如果是星期四而星期一是假日怎么办?或者如果假期是在星期二?如果有两个假期怎么办?

如果你想做的是把它定为5天,但在你可以做的范围内,每个假期或周末都加一天:

SELECT
Purchases.*,
DATEADD(
DAY, 
COALESCE(
(   SELECT  COUNT(1)
FROM    Dim.Date
WHERE   Dim.Date BETWEEN CONVERT(Date,Purchases.chargeDateTime) AND DATEADD(DAY,5,Purchases.chargeDateTime)
AND     (       Dim.Date.HolidayFlag = 'Y'
OR  DATEPART(WEEKDAY,Dim.Date) IN (1,7)
)
),
0
) + 5,
Purchases.chargeDateTime
) [FollowUp]
FROM Sales.Purchases

如果你不想在周末多出一天时间,只需删除OR DATEPART行。

最新更新