带节假日排除条件的日期条件

Date Condition with Case when Holiday exclude

我需要从月初即 8 月 1 日到 8 月 16 日的销售情况,所以这是我的销售查询 - 这里Net_Amount是销售数字栏,

select sum(case when Date=FORMAT(GetDate()-1, 'yyyy-MM-dd') 
                then Net_Amount else 0
           end) as TodaysSales
From SalesM

现在我们有周五假期,我希望如果周五到来,那么它应该从 8 月 1 日算到 8 月 15 日,即星期四。我有一个 table 日期 Table 星期五有一列 Isweekend ='1' ,我如何在我的查询中使用它,因为我已经提出了一个案例 SalesM table 有月份列,日期 table 也有月份和年份列。

select case when satrndd = FORMAT(GetDate()-1, 'yyyy-MM-dd' )
            then inna when IsWeekend='1' then 
           else 0
       end as Todaystotal


select case when satrndd = FORMAT(GetDate()-1, 'yyyy-MM-dd' )
            then inna
            when IsWeekend='1' then 
            else 0
       end as Todaystotal

如果我没猜错的话,如果星期五是您日期范围的开始日期或结束日期,您希望避开星期五。如果我希望你有两个日期时间类型的参数@start_date_param 和@end_date_param,那么下面的逻辑应该可以工作-

CASE 
    WHEN DATENAME(weekday,@start_date_param) = 'Friday' 
        THEN DATEADD(DD,1,@start_date_param)
    ELSE @start_date_param
END StartDate,
CASE 
    WHEN DATENAME(weekday,@end_date_param) = 'Friday' 
        THEN DATEADD(DD,-1,@end_date_param)
    ELSE @end_date_param
END EndDate

以下 case 表达式适用于您要查找的第 2 列 (Sales_SOM_to_TillDate):

如果不是星期五,它会考虑 "Yesterday",否则会 "Day before yesterday" 您可以添加自己的逻辑,以防 "day before yesterday" 不符合需要

CASE WHEN satrndd BETWEEN 
        DATEFROMPARTS (DATEPART(YEAR, GETDATE ()), DATEPART(MONTH, GETDATE() ), 1 ) and  -- Start of the month
        IIF (DATENAME (WEEKDAY, GETDATE() ) = 'Friday', FORMAT(GetDate()-2, 'yyyy-MM-dd' ), FORMAT(GetDate()-1, 'yyyy-MM-dd' )) -- It would be "Yesterday" when not friday, otherwise would be "Day before yesterday" you can add your own logic in case "day before yesterday" would not fits the needs
    THEN Net_Amount 
    Else 0 END

如果您想使用数据库中存在的 Date table,我相信 Isweekend =1 应该属于 where 原因。