sql语句:当前值为空时,获取最近一月的值

由于设置原因,当月数据都要月底才会有数据。所以我想如果比如现在12月没数据,可不可以获取最近有数值月份的值(比如图例的10月数据),到时12月有数据了就还是取成12月的数据。怎么可以在sql里这样设置?

image.pngimage.png

FineReport 帆软用户o8Hv4jPkHk 发布于 2022-12-12 11:41
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-12-12 11:48(编辑于 2022-12-12 16:39)

oracle?mysql?SqlServer?

----------------------

with tablea as (

select '1月' [LYDATE],14.5 [FUNITACTUALCOST],'A' [物料] union ALL

select '4月' [LYDATE],14.5 [FUNITACTUALCOST],'A' [物料] union ALL

select '5月' [LYDATE],14.213 [FUNITACTUALCOST],'A' [物料] union ALL

select '9月' [LYDATE],16 [FUNITACTUALCOST],'A' [物料] union ALL

select '10月' [LYDATE],16 [FUNITACTUALCOST],'A' [物料] union ALL

select '12月' [LYDATE],0 [FUNITACTUALCOST],'A' [物料] union ALL

select '1月' [LYDATE],14.5 [FUNITACTUALCOST],'b' [物料] union ALL

select '4月' [LYDATE],14.5 [FUNITACTUALCOST],'b' [物料] union ALL

select '5月' [LYDATE],14.213 [FUNITACTUALCOST],'b' [物料] union ALL

select '9月' [LYDATE],16 [FUNITACTUALCOST],'b' [物料] union ALL

select '10月' [LYDATE],0 [FUNITACTUALCOST],'b' [物料] union ALL

select '12月' [LYDATE],0 [FUNITACTUALCOST],'b' [物料] 

)

SELECT *,(CASE WHEN FUNITACTUALCOST=0 THEN (SELECT TOP 1 FUNITACTUALCOST FROM tablea B WHERE b.物料=tablea.物料 and B.FUNITACTUALCOST<>0 AND REPLACE(B.LYDATE,'月','')*1<REPLACE(tablea.LYDATE,'月','')*1 ORDER BY REPLACE(B.LYDATE,'月','')*1 DESC ) ELSE FUNITACTUALCOST END) [NEW_] FROM tablea 

image.png

最佳回答
0
用户k6280494Lv6资深互助
发布于2022-12-12 11:50(编辑于 2022-12-12 11:50)

类似这样吧

where 1=1

${if(sql("FRDemo","select 字段 from 表 where lydate='12月'",1,1)>0,"and lydate='12月'","and lydate='11月'")}

  • 2关注人数
  • 351浏览人数
  • 最后回答于:2022-12-12 16:39
    请选择关闭问题的原因
    确定 取消
    返回顶部