给定日期范围计算星期六的数量
Count # of Saturdays given a date range
我有一个日期时间字段和一个网络字段。 Sat Count 字段由 =IIf(DatePart("w",Fields!DespatchDate.Value)=7,1,0)
完成
我想在给定开始日期和结束日期(通常是一个月)的情况下计算星期六的总数。
我试了 =Sum(IIf(DatePart("w",Fields!DespatchDate.Value)=7,1,0)
但总数是错误的。
我还想把星期六算作这个月剩下的时间,例如图片中缺少第 3 个星期六。
周六我也想做网总
你能给我指个方向吗?我可以在 SQL 或 SSRS
中完成
考虑到我们没有提供任何输入或所需的输出,我假设您只想计算给定范围内的星期六:
Select COUNT(*), SUM(Net)
FROM table
WHERE Day# = 7 AND Date BETWEEN '2021-02-16' AND '2021-02-23'
假设您想要计算星期六,即使它不属于您的数据集,您需要做的是填充给定范围内的所有日期,然后将其加入您的基础数据集。
这将确保它考虑到一周中的所有天数,而不管在该日期/那一天发生的调度事件。
下面是一些 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
由于我不知道您需要的输出是什么,因此无法进一步总结。但是你明白了!
我有一个日期时间字段和一个网络字段。 Sat Count 字段由 =IIf(DatePart("w",Fields!DespatchDate.Value)=7,1,0)
我想在给定开始日期和结束日期(通常是一个月)的情况下计算星期六的总数。 我试了
=Sum(IIf(DatePart("w",Fields!DespatchDate.Value)=7,1,0)
但总数是错误的。我还想把星期六算作这个月剩下的时间,例如图片中缺少第 3 个星期六。
周六我也想做网总
你能给我指个方向吗?我可以在 SQL 或 SSRS
中完成考虑到我们没有提供任何输入或所需的输出,我假设您只想计算给定范围内的星期六:
Select COUNT(*), SUM(Net)
FROM table
WHERE Day# = 7 AND Date BETWEEN '2021-02-16' AND '2021-02-23'
假设您想要计算星期六,即使它不属于您的数据集,您需要做的是填充给定范围内的所有日期,然后将其加入您的基础数据集。
这将确保它考虑到一周中的所有天数,而不管在该日期/那一天发生的调度事件。
下面是一些 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
由于我不知道您需要的输出是什么,因此无法进一步总结。但是你明白了!