计算给定日期范围的星期六数

时间:2021-02-23 06:28:08

标签: sql sql-server reporting-services

enter image description here

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

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

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

  • 我还想在星期六做一个总的网络。

你能帮我指明方向吗?我可以在 SQL 或 SSRS 中完成

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

这将确保它涵盖一周中的所有天数,而不管在该日期/天发生的调度事件如何。

以下是一些可能有助于您入门的 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

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