【问题标题】:Count # of Saturdays given a date range给定日期范围的星期六计数
【发布时间】:2021-02-23 06:28:08
【问题描述】:

我有一个日期时间字段和一个网络字段。 Sat Count 字段由=IIf(DatePart("w",Fields!DespatchDate.Value)=7,1,0) 完成

  • 我想在给定开始日期和结束日期(通常是一个月)的情况下计算星期六的总数。 我试过=Sum(IIf(DatePart("w",Fields!DespatchDate.Value)=7,1,0),但总数是错误的。

  • 我还想计算本月剩余时间的星期六,例如图片中缺少第三个星期六。

  • 我也想在星期六做一次全网。

你能给我指个方向吗?我可以在 SQL 或 SSRS 中做到这一点

【问题讨论】:

  • 你能给我们你的输入表和输出表吗?我认为给定的表不包含datetime 字段。
  • 您想在日期范围内计算一个星期六,即使那个星期六没有派送?您的图片中似乎缺少一个星期六。
  • @Trang Le - 有趣的是你接受了另一个答案.. 因为它不会计算你的“失踪”第三个星期六或任何在你的开始和结束日期之间错过的星期六或星期日!

标签: sql sql-server reporting-services


【解决方案1】:

考虑到我们没有提供任何输入或所需的输出,我假设您只想计算给定范围内的星期六:

Select COUNT(*), SUM(Net) 
FROM table 
WHERE Day# = 7 AND Date BETWEEN '2021-02-16' AND '2021-02-23'

【讨论】:

    【解决方案2】:

    假设您想计算星期六,即使它不属于您的数据集,您需要做的是填充给定范围内的所有日期,然后将其加入您的基础数据集。

    这将确保它考虑到一周中的所有天,而不管该日期/天发生的调度事件。

    下面是一些 SQL 代码,可以帮助您开始。

    declare @startdate date = '2021-02-01'
    declare @enddate date = '2021-02-28'
    
    if OBJECT_ID ('tempdb..#dates') is not null
    drop table #dates
    
    ;WITH mycte AS
    (
      SELECT CAST(@startdate AS DATETIME) DateValue
      UNION ALL
      SELECT  DateValue + 1
      FROM    mycte   
      WHERE   DateValue + 1 < @enddate
    )
    
    SELECT  DateValue into #dates
    FROM    mycte
    OPTION (MAXRECURSION 0)
    
    select 
    d.DateValue
    , datepart(weekday,d.DateValue) as day_no 
    ,case when datepart(weekday,d.DateValue)  = 7 then isnull(t.net,0) else 0 end as sat_net
    ,case when datepart(weekday,d.DateValue)  = 1 then isnull(t.net,0) else 0 end as sun_net
    
    from #dates d
    
    left join your_table t
        on d.DateValue = t.some_date
    
    drop table #dates
    

    由于我不知道您需要的输出是什么,因此我无法进一步总结。但你明白了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多