sql这样写报错${len(split(SCODE5,\"\',\'\"))},

2png.png

FineReport yzm529517 发布于 2023-12-7 16:14 (编辑于 2023-12-7 18:08)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
GGGGGGGGGLv5初级互助
发布于2023-12-7 16:41(编辑于 2023-12-7 17:12)

思路:

第一步:先找出都参加了选中的科目的员工,SQL如下:

-- 逻辑:经过培训名称参数筛选后,员工参与的培训个数 等于 下拉框选中的培训的个数,就说明员工都参加的下拉框里选的培训

select 员工编号 from 表名

    where 培训名称 in ('${培训名称}')

    group by 员工编号

    having count(distinct 培训名称) = ${len(split(培训名称,"','"))}

第二步:第一步已经找出了对应员工,那么只需要再筛选选中的科目就可以了,完整SQL如下:

select * from 表名

where 

-- 找出对应员工

员工编号 in ( 

    select 员工编号 from 表名

    where 培训名称 in ('${培训名称}')

    group by 员工编号

    having count(distinct 培训名称) = ${len(split(培训名称,"','"))}

)

-- 筛选选中的科目

and 培训名称 in ('${培训名称}')

其中${}里面写的培训名称是指培训名称下拉框参数名

  • yzm529517 yzm529517(提问者) ${len(split(科目,\"\',\'\"))}这个也是培训名称下拉框参数吗?
    2023-12-07 16:54 
  • GGGGGGGGG GGGGGGGGG 回复 yzm529517(提问者) 是的,${}里写的帆软公式,用来处理培训名称参数的,作用是计算下拉框选中了多少个,当筛选后的员工的培训个数等于下拉框选中的个数,就说明他都参加下拉框选中的培训
    2023-12-07 17:01 
  • yzm529517 yzm529517(提问者) 回复 GGGGGGGGG ${len(split(SCODE5,\"\',\'\"))} 这样写可以吗,我的培训名称下拉框的值为SCODE5
    2023-12-07 17:53 
  • yzm529517 yzm529517(提问者) 回复 GGGGGGGGG ${if(len(SCODE5) == 0, \"\", \"AND V.员工编号 IN ( SELECT 员工编号 FROM YK_XM_HRMPX11_V WHERE 培训名称 IN (\'\" + SCODE5 + \"\') GROUP BY 员工编号 HAVING COUNT(DISTINCT 培训名称) = \" + len(split(SCODE5, \"\',\'\")) + \" ) AND V.培训名称 IN (\'\" + SCODE5 + \"\')\") }
    2023-12-07 17:54 
  • GGGGGGGGG GGGGGGGGG 回复 yzm529517(提问者) 你的SCODE5是参数,需要用${}包起来,比如你SQL里写的:培训名称 in (\'\"+SCODE5+\"\'),改成 培训名称 in (\'${SCODE5}\')
    2023-12-08 08:55 
最佳回答
0
胡歌Lv7中级互助
发布于2023-12-7 16:15(编辑于 2023-12-7 16:32)

把数据转换下,行转列,比如mysql里面就是group_concat(培训名称),这样就把每个人的培训内容拼接在一起

  • yzm529517 yzm529517(提问者) 比日说我培训科目选前三个,我想要都参加了这三个科目的数据,如果用in的话只参加一个数据也展示出来了
    2023-12-07 16:18 
  • 胡歌 胡歌 回复 yzm529517(提问者) 我不知道你这边的数据是怎样的,你这要求有点麻烦
    2023-12-07 16:30 
最佳回答
0
华莉星宸Lv7资深互助
发布于2023-12-7 16:27

你数据库里面的值是怎么保存的呢?要根据你存储的模式才能写对应的SQL

人员培训名称人员培训名称
姓名1职前训姓名1职前训,转正式员工训
姓名1转正式员工训姓名2职前训
姓名2职前训姓名3职前训
姓名3职前训

  • yzm529517 yzm529517(提问者) 我更新了您看下
    2023-12-07 16:29 
  • 华莉星宸 华莉星宸 回复 yzm529517(提问者) 在查询的时候做一次嵌套, 先用 in (\'${scode5}\') 把对应的数据筛出来,在统计是否这几项都参加了,加一层count统计 根据上面count出来的,在关联一次原表应该就OK了
    2023-12-07 16:35 
  • 4关注人数
  • 369浏览人数
  • 最后回答于:2023-12-7 18:08
    请选择关闭问题的原因
    确定 取消
    返回顶部