帆软能实现这个以下问题的逻辑么,有点长

比如我选择第一季度的时候,单元格根据现在的月份去求和,例如,现在三月份,选择第一季度时一二月份求和,如果实际月份是四月份,就一二三月求和,如果是一月份就一月求和,图里的数据是去年的,是需要扣当前年的image.png能够实现么,业务部门提出的需求我实在是想不出来了QAQ

FineReport 猴不是猴 发布于 2022-3-9 11:14 (编辑于 2022-3-9 11:26)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
CD20160914Lv8专家互助
发布于2022-3-9 11:18(编辑于 2022-3-9 12:46)

例如,现在三月份,选择第一季度时一二月份求和

为什么3月份的不能求和???

----------------------------------以下是mysql测试的语句-------------------------

select t2.* from (

select t.month_s,t.year_code,t.number_s from (

select '1' as month_s,'2021' as year_code,38 as number_s union all

select '2' as month_s,'2021' as year_code,356 as number_s union all

select '3' as month_s,'2021' as year_code,493 as number_s union all

select '4' as month_s,'2021' as year_code,115 as number_s union all

select '5' as month_s,'2021' as year_code,565 as number_s union all

select '6' as month_s,'2021' as year_code,565 as number_s union all

select '7' as month_s,'2021' as year_code,341 as number_s union all

select '8' as month_s,'2021' as year_code,393 as number_s union all

select '9' as month_s,'2021' as year_code,582 as number_s union all

select '10' as month_s,'2021' as year_code,28 as number_s union all

select '11' as month_s,'2021' as year_code,689 as number_s union all

select '12' as month_s,'2021' as year_code,452 as number_s union all

select '1' as month_s,'2022' as year_code,396 as number_s union all

select '2' as month_s,'2022' as year_code,352 as number_s union all

select '3' as month_s,'2022' as year_code,331 as number_s union all

select '4' as month_s,'2022' as year_code,563 as number_s union all

select '5' as month_s,'2022' as year_code,160 as number_s 

) t

where 1=1

/*取年*/

${if(len(year_code)=0,"","and t.year_code= '"+ year_code + "'")}

/*历史年的直接查询季度对应的数据,如果i不是历史年的数据,先按季度把每三个月的数据查询出来*/

${if(year_code<year(today())&& jd =1 ," and t.month_s in('1','2','3')",if(year_code<year(today())&& jd =2 ," and t.month_s in('4','5','6')",if(year_code<year(today())&& jd =3 ," and t.month_s in('7','8','9')",if(year_code<year(today())&& jd =4 ," and t.month_s in('10','11','12')",if(year_code=year(today()) && jd =1 ," and t.month_s in('1','2','3')",if(year_code=year(today()) && jd =2 ," and t.month_s in('4','5','6')",if(year_code=year(today()) && jd =3 ," and t.month_s in('7','8','9')"," and t.month_s in('10','11','12')")))))))}

) t2

where 1=1

and t2.month_s<'${month(today())}'  /*最后再判断一次月份小于当前服务器的月份就行了*/

/*2022年1季度的sql限制*/

image.png

image.png

  • 猴不是猴 猴不是猴(提问者) 因为他们还要除一个人均,三月份没过完整个三月数据不全会印象平均值QAQ
    2022-03-09 11:21 
  • CD20160914 CD20160914 回复 猴不是猴(提问者) 那直接写在where的条件判断中吧。但是如果现在是2022-01-10号,月份还没有过完。人家选择了1季度,,不就是不求和了?
    2022-03-09 11:24 
  • 猴不是猴 猴不是猴(提问者) 回复 CD20160914 最搞的就是 一月份当月的话他们需要一月求和,我就麻了
    2022-03-09 11:27 
  • CD20160914 CD20160914 回复 猴不是猴(提问者) 上面改了。为了显得不那么复杂。我套了两次查询。这样容易理解一些。不然全在一个if里面判断太复杂。看类似的语句,你改成你的表名。与字段就行了。。我是mysql测试的。
    2022-03-09 12:42 
最佳回答
0
linbodingLv6中级互助
发布于2022-3-9 11:17(编辑于 2022-3-9 11:21)

用sql判断啊,如果是第一季度,数据就=01,02,03月份啊,顺推就好了

where case when '${参数}' = 'q1' 

     then  when right(日期,2) in ('01','02','03')

                 then  year(日期)=year('${时间参数}')

     when    .....

     end 

       

  • 猴不是猴 猴不是猴(提问者) 主要是 如果是现在是一月份 一月数据汇总 但到了二月份 二月还没结束 他需要的还是一月的汇总,如果到了四月份,他需要的是一二三月的汇总,这个我就绕不出来了 不知道怎么解决了
    2022-03-09 11:20 
  • linboding linboding 回复 猴不是猴(提问者) 那先做一次时间上的过滤,比如先过滤时间,数据要小于当前月份,就不会把二月份的数据算上了
    2022-03-09 11:24 
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-3-9 11:24(编辑于 2022-3-9 13:08)

他们的需求没描述清楚还是你没描述清楚?

image.png

扣除当月的数据这个应该是当年份

image.png

是当年的情况才扣除吧?以前的不需要扣吧??

WorkBook1.zip

  • 猴不是猴 猴不是猴(提问者) 对对对 这个忘记说了
    2022-03-09 11:26 
  • Z4u3z1 Z4u3z1 回复 猴不是猴(提问者) 下载demo.SQL 语句直接用 WHERE 日期字段>=\'${RQ1_}\' and 日期字段<\'${RQ2_}\'
    2022-03-09 13:09 
最佳回答
0
yzm339714Lv6中级互助
发布于2022-3-9 11:25

sql 加判断处理呗,

where year = ${year}

${if(jd = 1," and month in (1,2,3)   "," ")}

${if(jd = 2," and month in (4,5,6)  "," ")}

${if(jd = 3," and month in (7,8,9) "," ")}

如果只有一个时间字段的话,就要麻烦了。用存储过程去处理把,存储过程里面拼接新的时间

  • 4关注人数
  • 421浏览人数
  • 最后回答于:2022-3-9 13:08
    请选择关闭问题的原因
    确定 取消
    返回顶部