finereportsqlif判断

image.png

我这个写法好像不对 求正确的写法,需求是:当year字段值不为空 执行一段sql ,再当year和month 都不为空执行相关sql,然后当year,month,weeks字段都不为空再执行一段sql,这样的 怎么写?

FineReport Ken小伙 发布于 2021-8-25 14:00
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共5回答
最佳回答
0
黄源Lv6中级互助
发布于2021-8-25 14:40(编辑于 2021-8-25 14:43)

if(len(year)!=0&&len(month)!=0&&len(weeks)!=0,sql3,if(len(year)!=0&&len(month),sql2,if(len(year)!=0,sql1,'')))

其实列名是一样的区别在于表名,用动态表名就行了啊

最佳回答
0
清风TLv6初级互助
发布于2021-8-25 14:03

用union啊

最佳回答
0
陈阿大Lv5初级互助
发布于2021-8-25 14:04(编辑于 2021-8-25 14:04)

参考这个

${IF(参数='1,2',

"SELECT * FROM 表1 union all SELECT * FROM 表2",

IF(参数=1,

"SELECT * FROM 表1",

IF(参数=2,

"SELECT * FROM 表2",

""

)

)}

  • Ken小伙 Ken小伙(提问者) 你这个是三目运算 最后不成立就 “”的吗?
    2021-08-25 14:10 
  • Ken小伙 Ken小伙(提问者) ${ IF(len(year) !=0, \"SELECT bg,job_title_count,demand_count,entry_count,year,hr_region as classify,achieve_rate FROM dwservice.dws_hr_achieve_area_by_bg_year WHERE day in(SELECT day from dwservice.dws_hr_achieve_area_by_bg_year GROUP BY day ORDER BY day LIMIT 1) AND bg=\'\"+bg+\"\' AND year=\"+year+\" ORDER BY year\", IF(len(month) !=0, \"SELECT bg,job_title_count,demand_count,entry_count,year,hr_region as classify,achieve_rate FROM dwservice.dws_hr_achieve_area_by_bg_month WHERE day in(SELECT day from dwservice.dws_hr_achieve_area_by_bg_month GROUP BY day ORDER BY day LIMIT 1) AND bg=\'\"+bg+\"\' AND year=\"+year+\" AND month=\"+month+\" ORDER BY month\", IF(len(weeks) !=0, \"SELECT bg,job_title_count,demand_count,entry_count,year,hr_region as classify,achieve_rate FROM dwservice.dws_hr_achieve_area_by_bg_weeks WHERE day in(SELECT day from dwservice.dws_hr_achieve_area_by_bg_weeks GROUP BY day ORDER BY day LIMIT 1) AND bg=\'\"+bg+\"\' AND year=\"+year+\" AND month=\"+month+\" AND weeks=\"+weeks+\" ORDER BY weeks\",\"\") )}
    2021-08-25 14:21 
  • Ken小伙 Ken小伙(提问者) 这样写对吗
    2021-08-25 14:21 
  • 陈阿大 陈阿大 回复 Ken小伙(提问者) sql1--year sql2--month sql3--week sql1.2,3--表结构一致 ${IF( and(len(week) !=0 ,len(month) !=0,len(year) !=0), \"sql3 union all sql2 union all sql1\", ${IF( and(len(month) !=0 ,len(year) !=0), \"sql2 union all sql1\", IF(len(year) !=0 , \"sql1\", \"\" ) ) )}
    2021-08-25 14:50 
  • 陈阿大 陈阿大 回复 Ken小伙(提问者) 或者这样 ${IF( len(year) !=0, \" sql1\", \"\" )} ${IF( and (len(year) !=0 ,len(month) !=0), \" union all sql2\", \"\") } ${IF( and (len(year) !=0 ,len(month) !=0,len(week) !=0), \" union all sql3\", \"\" )}
    2021-08-25 14:59 
最佳回答
0
huyajunLv6初级互助
发布于2021-8-25 14:06

你这个if()里面只写了一个条件,if(len(YEAR)!=0,"",""),你掉了当为0的时候取数

最佳回答
0
shirokoLv6资深互助
发布于2021-8-25 14:32

image.png

你这三个有同时都执行的可能。

第一个不变。

第二个变成if(len(year)=0 && len(month)!=0)

第三个变成if(len(year)=0 && len(month)=0 && len(weeks)!=0)

  • 6关注人数
  • 337浏览人数
  • 最后回答于:2021-8-25 14:43
    请选择关闭问题的原因
    确定 取消
    返回顶部