日期随时间筛选范围横向扩展

image.png

怎么实现,什么都不选时,默认为本月第一天至本月最后一天,时间周期为:周。

然后B2按照周期数横向扩展image.png

当选择日,根据时间区间进行横向扩展每一天,选择周和时间区间后按照时间区间进行扩展,比如选择2023-09-01——2023-09-08,周期为:周,那么横向扩展为:2023-09-01——2023-09-03;2023.09.04——2023.09.08 

FineReport 帆软用户YbG5J0kkjo 发布于 2023-9-25 15:54
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
快乐星光Lv5中级互助
发布于2023-9-25 17:05(编辑于 2023-9-25 17:06)

可以用sql 实现

set datefirst 1 ;-- 设置周1为第一天

DECLARE @wyr varchar(100) -- 控件名称

set @wyr='周'  

select *,case when @wyr='日' or len(@wyr)=0 then CONVERT(varchar(100),ddate,23)

              when @wyr='周' then 周区间

when @wyr='月' then cast(month(ddate) as varchar(100))

else CONVERT(varchar(100),ddate,23) end as 横向扩展字段

from (

select ddate,

'第'+cast((datepart(wk,ddate) - datepart(wk,convert(varchar(7),ddate,120) + '-01') + 1) as varchar(2)) + '周' AS  周,

case when  month(ddate) >

month(DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0))

then convert(varchar(10),DATEADD(DD,-DATEPART(day,ddate)+1,ddate),120)   

else convert(varchar(10),DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0),120)  

end -- AS 周首日期,

+'=>'+

case when  month(ddate) <

month(DATEADD(DAY,6,DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0)))

then convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(MM,1,ddate)),dateadd(MM,1,ddate)),120)

else convert(varchar(10),DATEADD(DAY,6,DATEADD(WEEK, DATEDIFF(WEEK,0,CONVERT(DATETIME,ddate,120)-1),0)),120) 

end -- AS 周未日期,

AS 周区间

from (

select dateadd(dd,number,cast('2023'+'-01-01' as datetime)) ddate -- 2023可以用控件替代

from master..spt_values

where [type] = 'p' and number between 0 and 400

) d

where d.ddate>='2023-02-01' and d.ddate<'2023-05-01'   -- 时间区间控件

group by ddate

 ) ss

image.png

最佳回答
0
ID1208Lv6高级互助
发布于2023-9-25 16:53

有个思路,可以试试,按照日、周、月,写好对应的数据集,字段默认列宽0,然后动态参数,根据选择的日期类型显示对应的字段(条件判断,设置列宽)

  • 3关注人数
  • 288浏览人数
  • 最后回答于:2023-9-25 17:06
    请选择关闭问题的原因
    确定 取消
    返回顶部