sql求环比

环比=本月数据/上月数据,但是1到9月用substr()取出来是01~09,10~12月是正常的,假如月份参数是month,那么上月使用month-1是求不出来上月的数据的。

应该怎么算上月的数据(销量)?

按年、月、部门汇总销量

image.png

如果不输入月m,查出来的还是每个月的数据,而不是上月数据,还有case when 要写在哪里,怎么写呢?

where 1=1 

${if(len(公司)=0,"","and t6.name = '"+公司+"'")}

and t3.name like '%${部门}%' 

${if(len(m)=0,"and substr(t2.dbilldate,0,4) = '"+y+"'",(case when m ='01' then "and substr(t2.dbilldate,0,4)+1 = '"+y+"' and substr(t2.dbilldate,6,2) = '12'" else"and substr(t2.dbilldate,0,4) = '"+y+"' and trim(to_char(substr(t2.dbilldate,6,2)+1,'00')) = '"+m+"'" end))}

group by t6.name,t3.name,substr(t2.dbilldate,0,4),substr(t2.dbilldate,6,2)

order by substr(t2.dbilldate,0,4),substr(t2.dbilldate,6,2),sum(t.nnum) desc

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

因为你在数据库中使用了month-1  本来原始截取出来是06或者07的,当你-1后。它会变成6或者7

你再套一个to_char就行了

select to_char(substr(t.日期,6,2)-1,'00') as 月份 from

 (select '2022-07-05' as 日期  from dual) t

image.png

  • ygym ygym(提问者) 跨年的怎么算环比,比如2022年1月与2021年12月,用case when吗还是什么,具体要怎么写呢 我现在是用的${if(len(m)=0,\"\",\"and trim(to_char(substr(t2.dbilldate,6,2)+1,\'00\')) = \'\"+m+\"\'\")},m输入06,日期查出来是05月汇总销量,跨年时候月份要怎么写没啥思路呢
    2022-07-05 08:43 
  • CD20160914 CD20160914 回复 ygym(提问者) 1、oracel可以用to_date把文本日期转换成真正的日期,再用函数获取上一年同期的日期就行了,比如select add_months(sysdate,-12) from dual 2、就如你说直接对1月和12月进行判断。。使用case when 3、分别写数据集。。然后通过过滤的条件关联起来就行了。。。
    2022-07-05 08:49 
  • ygym ygym(提问者) 回复 CD20160914 case when 要怎么写呢
    2022-07-05 15:09 
  • CD20160914 CD20160914 回复 ygym(提问者) 我不是很清楚你的需求。。你上面问题的是月份转换的问题。。具体你的要做什么。。我不是很清楚。。
    2022-07-05 15:14 
  • CD20160914 CD20160914 回复 ygym(提问者) 你这个想简单就写多个数据集。。再用过滤条件关联就行了。我现在就这样做的。或者是固定两列。一列上期,一列本期,把字段放在单元格就行了。我的资产负债表就是这样做的。
    2022-07-05 15:54 
最佳回答
1
Z4u3z1Lv6专家互助
发布于2022-6-30 11:01

啥子数据库?

  • ygym ygym(提问者) oracle
    2022-06-30 12:07 
  • Z4u3z1 Z4u3z1 回复 ygym(提问者) https://wenku.baidu.com/view/06fe507e383567ec102de2bd960590c69ec3d886.html
    2022-06-30 12:42 
  • ygym ygym(提问者) 回复 Z4u3z1 用YEAR(t2.dbilldate),month(t2.dbilldate)不能格式化吧,预览是报错的
    2022-07-04 15:34 
  • Z4u3z1 Z4u3z1 回复 ygym(提问者) 你看下数据库中t2.dbilldate 是什么类型的数据?
    2022-07-04 15:36 
  • ygym ygym(提问者) 回复 Z4u3z1 char()
    2022-07-04 15:42 
最佳回答
1
丶尛伟Lv6初级互助
发布于2022-6-30 11:29

把month参数,处理成年月的形式,再根据日期计算公式算出上个月,最后再截取月份,传回sql里面

  • 3关注人数
  • 588浏览人数
  • 最后回答于:2022-7-5 10:14
    请选择关闭问题的原因
    确定 取消
    返回顶部