-
-
伶俐 数据达人Lv4
发表于2019-2-25 15:58
悬赏1
已解决
楼主
请教一下大神们,sql数据源在写过滤条件的时候,能否实现参数多选?
参数单选的时候
在sql数据源里这样写实现了单选过滤<#=if(@wjfl="","1=1",if(@wjfl="01","MM.FIVE_CLASS='01'",if(@wjfl="02","MM.FIVE_CLASS='02'",if(@wjfl='03',"MM.FIVE_CLASS='03'",if(@wjfl='04',"MM.FIVE_CLASS='04'","MM.FIVE_CLASS='05'")))))#>
想请教一下,当参数多选的时候,如何写这个过滤条件?
万分感谢! ! !
参数单选的时候

在sql数据源里这样写实现了单选过滤<#=if(@wjfl="","1=1",if(@wjfl="01","MM.FIVE_CLASS='01'",if(@wjfl="02","MM.FIVE_CLASS='02'",if(@wjfl='03',"MM.FIVE_CLASS='03'",if(@wjfl='04',"MM.FIVE_CLASS='04'","MM.FIVE_CLASS='05'")))))#>
想请教一下,当参数多选的时候,如何写这个过滤条件?

万分感谢! ! !
31个回答
伶俐 发表于 2019-2-25 17:40
使用的是DB2数据库,资产分类与五级分类意义是一样的,一共有五类(正常,关注,次级,可疑,损失),之 ...
我觉的这个应该是勾选框组没有给默认值造成的null报错。给个默认值试试。
如果不想要给默认值的话,需要写if表达式,分为两种情况:1、勾选框组的值为空的过滤;2、勾选框组的值不为空。
另外。勾选框组得到的值的格式是1|2|3这种格式。可以用<#=@cs^"".split("\\|")#>这样的写法转换成数组。


缱绻 发表于 2019-2-26 09:44
我觉的这个应该是勾选框组没有给默认值造成的null报错。给个默认值试试。
如果不想要给默认值的话,需要 ...
嗯嗯,我还有一个疑问 <#=@zcfl.select(true,"MM.FIVE_CLASS in '"+@zcfl+"'").join(" or ")#> 用or连接的语句,如果我想在整句加上 括弧, 譬如最后的结果是 (mm.five_class IN '01' OR mm.five_class IN '02') ,这个括弧在上面的宏表达式应该加在哪里呢
缱绻 发表于 2019-2-26 09:44
我觉的这个应该是勾选框组没有给默认值造成的null报错。给个默认值试试。
如果不想要给默认值的话,需要 ...
我这边给了默认值还是报跟之前一样的错,我怀疑是这个 括弧的问题 ,<#=@zcfl.select(true,"(MM.FIVE_CLASS in '"+@zcfl+"'"+")").join(" or ")#> 但是我这样加括弧好像不太对
本帖最后由 缱绻 于 2019-2-26 10:29 编辑
伶俐 发表于 2019-2-26 09:58
嗯嗯,我还有一个疑问 用or连接的语句,如果我想在整句加上 括弧, 譬如最后的结果是 (mm.five ...
您这个mm.five_class IN '01' OR mm.five_class IN '02',跟mm.five_class IN ["01","02"]最后实现的效果有什么区别吗?
缱绻 发表于 2019-2-26 10:25
您这个mm.five_class IN '01' OR mm.five_class IN '02',跟mm.five_class IN ["01","02"最后实现的效果 ...
只要实现 或 的关系就可以了,但是 因为 有 or , 有其他过滤条件的时候可能数据会不对,所以想着用括弧
缱绻 发表于 2019-2-26 10:25
您这个mm.five_class IN '01' OR mm.five_class IN '02',跟mm.five_class IN ["01","02"最后实现的效果 ...
我想实现的是这个效果

伶俐 发表于 2019-2-26 10:28
我想实现的是这个效果
查一个学生
select * from student where 学生姓名='张三'
select * from student where 学生姓 in('张三' )
查两个学生
select * from student where 学生姓名='张三' or 学生姓名='李四'
select * from student where 学生姓 in('张三' ,'李四')
所以我觉得两种写法都是一样的效果呢。
缱绻 发表于 2019-2-26 10:53
查一个学生
select * from student where 学生姓名='张三'
select * from student where 学生姓 in('张 ...
嗯嗯,<#=if(@zcfl='',"1=1","MM.FIVE_CLASS in "+@zcfl^"".split("\\|"))#> 我试了一下这种写法,但是报了和之前一样的错,单独写
<#=@zcfl^"".split("\\|")#> 是可以取到勾选的值,合在一块就不太对了
缱绻 发表于 2019-2-26 10:53
查一个学生
select * from student where 学生姓名='张三'
select * from student where 学生姓 in('张 ...
数据形成的是["01","02"],但是sql的 IN后面跟的是 (),不是[ ]