帆软小白,感觉是参数多条件查询的问题

人事系统,选择在职时,只显示当月在职员工,但是希望能显示当月在职+当月离职员工,逻辑是:选择在职时,fd_alter_time要在${fd_U_Year_Month}之后

fd_alter_time:OA账号修改时间

${fd_U_Year_Month}:就是第一个“年月”参数

我不知道怎么在参数是再加条件,希望大家给点思路

image.png

代码:

SELECT

p.fd_login_name,

e.fd_name,

p2.zws,

OPRJ.U_PrjCode,

OPRJ.U_PrjName,

SUM(act1.fd_U_Hours) AS sumHours

FROM sys_org_person as p 

left join sys_org_element as e  on p.fd_id=e.fd_id

left join ekp_jz_working_hours act1 on p.fd_login_name = act1.fd_person_id  

and act1.fd_U_Approve=1

and cast(act1.fd_U_Year as varchar)+'-'+cast(act1.fd_U_Month as varchar) = '${fd_U_Year_Month}'

left join View_sap_AVA_OPS_OPRJ OPRJ on act1.fd_U_PrjCode = OPRJ.U_PrjCode 

left join View_ljh_person_2 p2 on p.fd_id=p2.fd_id

left join dev_members_relationship dmr on p.fd_id=dmr.oa_id

where e.fd_org_type = '8'

 ${if(len(fd_is_available)==0,"","and e.fd_is_available = '"+fd_is_available+"'")}

 ${if(len(U_PrjCode)==0,"","and OPRJ.U_PrjCode  like '%"+U_PrjCode+"%'")}

 ${if(len(U_PrjName)==0,"","and OPRJ.U_PrjName  like '%"+U_PrjName+"%'")}

 ${if(len(fd_name)==0,"","and e.fd_name  like '%"+fd_name+"%'")}

 ${if(len(zws)==0,"","and p2.zws  like '%"+zws+"%'")}

 ${if(len(U_PrjType)==0,"","and OPRJ.U_PrjType = '"+U_PrjType+"'")}

 ${if(len(user_type)==0,"","and dmr.user_type = '"+user_type+"'")}

group by p.fd_login_name,e.fd_name,p2.zws,OPRJ.U_PrjCode,OPRJ.U_PrjName

order by p2.zws desc

image.png

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

如果 user_type 表示人员状态:在职、离职则

把${if(len(user_type)==0,"","and dmr.user_type = '"+user_type+"'")} 改成 试试

 ${if(len(user_type)==0,"",if(user_type=="在职","and (dmr.user_type = '"+user_type+"' OR fd_alter_time<='"+fd_U_Year_Month+"')","and dmr.user_type = '"+user_type+"'"))}

  • 用户m2896739 用户m2896739(提问者) 感谢回复,fd_is_available表示人员状态,1在职,0离职。改完后报错了,麻烦您看下什么情况,截图在帖子里,感谢。
    2022-02-24 16:04 
  • Z4u3z1 Z4u3z1 回复 用户m2896739(提问者) DATEINMONTH(CONCATENATE(fd_U_Year_Month,\"-01\"),-1)
    2022-02-24 16:08 
  • Z4u3z1 Z4u3z1 回复 用户m2896739(提问者) 可能是你fd_U_Year_Month 返回的字符串yyyy-MM 没得DD 拼接一下
    2022-02-24 16:10 
  • 用户m2896739 用户m2896739(提问者) 回复 Z4u3z1 哈喽您好,谢谢回复,试了一早上还是不行,请问在参数为空,也就是len(fd_is_available)==0的情况下,把fd_is_available=1 和 fd_is_available=2 的人员都带出来,然后判断 fd_alter_time>= fd_U_Year_Month,应该怎么写?感谢感谢!!
    2022-02-25 09:25 
  • Z4u3z1 Z4u3z1 回复 用户m2896739(提问者) 我觉得是逻辑问题,私聊吧
    2022-02-25 09:38 
最佳回答
0
wangfutaoLv5初级互助
发布于2022-2-24 15:06(编辑于 2022-2-24 15:15)

可以在数据集筛选条件再做判断,如下:

${if(len(U_PrjType)==0,"",if(U_PrjType>111,"","and OPRJ.U_PrjType = '"+U_PrjType+"'"))}

${if(len(U_PrjType)==0, "" , if(fd_alter_time>fd_U_Year_Month, "" ," and OPRJ.U_PrjType = ' " + U_PrjType + " ' "))} 

  • 用户m2896739 用户m2896739(提问者) 感谢回复,请问可以写成if(fd_alter_time>${fd_U_Year_Month},\"\",\"\")这样么?就是把另一个参数写进if里
    2022-02-24 15:09 
  • wangfutao wangfutao 回复 用户m2896739(提问者) ${if(len(U_PrjType)==0,\"\",if(fd_alter_time>fd_U_Year_Month,\"\",\"and OPRJ.U_PrjType = \'\"+U_PrjType+\"\'\"))} 这样格式可以,这个语句中只能有一个$符号的,里面的参数直接写参数名字即可
    2022-02-24 15:11 
  • 2关注人数
  • 386浏览人数
  • 最后回答于:2022-2-24 16:04
    请选择关闭问题的原因
    确定 取消
    返回顶部