sql数据源能否实现参数多选?

32959
31

伶俐 数据达人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'")))))#>

想请教一下,当参数多选的时候,如何写这个过滤条件?

万分感谢! ! !

最近看过此主题的会员

xyr

关晓彤的老公

esen_408VBWR3E6V9

清蒸

esen_5ID1Y27813

jrjrjr

@bert

31个回答

只看楼主

缱绻 数据领袖Lv6

发表于2019-2-25 15:58

只看该作者

取消 关注该作者的回复

12#

伶俐 发表于 2019-2-25 17:40
使用的是DB2数据库,资产分类与五级分类意义是一样的,一共有五类(正常,关注,次级,可疑,损失),之 ...

我觉的这个应该是勾选框组没有给默认值造成的null报错。给个默认值试试。
如果不想要给默认值的话,需要写if表达式,分为两种情况:1、勾选框组的值为空的过滤;2、勾选框组的值不为空。
另外。勾选框组得到的值的格式是1|2|3这种格式。可以用<#=@cs^"".split("\\|")#>这样的写法转换成数组。


伶俐 数据达人Lv4

发表于2019-2-26 09:58

只看该作者

取消 关注该作者的回复

13#

缱绻 发表于 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')    ,这个括弧在上面的宏表达式应该加在哪里呢

伶俐 数据达人Lv4

发表于2019-2-26 10:05

只看该作者

取消 关注该作者的回复

14#

缱绻 发表于 2019-2-26 09:44
我觉的这个应该是勾选框组没有给默认值造成的null报错。给个默认值试试。
如果不想要给默认值的话,需要 ...

我这边给了默认值还是报跟之前一样的错,我怀疑是这个 括弧的问题 ,<#=@zcfl.select(true,"(MM.FIVE_CLASS in '"+@zcfl+"'"+")").join(" or ")#> 但是我这样加括弧好像不太对

缱绻 数据领袖Lv6

发表于2019-2-26 10:25

只看该作者

取消 关注该作者的回复

15#

本帖最后由 缱绻 于 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"]最后实现的效果有什么区别吗?

伶俐 数据达人Lv4

发表于2019-2-26 10:27

只看该作者

取消 关注该作者的回复

16#

缱绻 发表于 2019-2-26 10:25
您这个mm.five_class IN '01' OR mm.five_class IN '02',跟mm.five_class IN ["01","02"最后实现的效果 ...

只要实现 或 的关系就可以了,但是 因为 有  or , 有其他过滤条件的时候可能数据会不对,所以想着用括弧

伶俐 数据达人Lv4

发表于2019-2-26 10:28

只看该作者

取消 关注该作者的回复

17#

缱绻 发表于 2019-2-26 10:25
您这个mm.five_class IN '01' OR mm.five_class IN '02',跟mm.five_class IN ["01","02"最后实现的效果 ...

我想实现的是这个效果

缱绻 数据领袖Lv6

发表于2019-2-26 10:53

只看该作者

取消 关注该作者的回复

18#

伶俐 发表于 2019-2-26 10:28
我想实现的是这个效果

查一个学生
select * from student where 学生姓名='张三'
select * from student where 学生姓 in('张三' )
查两个学生
select * from student where 学生姓名='张三' or 学生姓名='李四'
select * from student where 学生姓 in('张三' ,'李四')

所以我觉得两种写法都是一样的效果呢。

伶俐 数据达人Lv4

发表于2019-2-26 10:58

只看该作者

取消 关注该作者的回复

19#

缱绻 发表于 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("\\|")#>  是可以取到勾选的值,合在一块就不太对了

伶俐 数据达人Lv4

发表于2019-2-26 11:01

只看该作者

取消 关注该作者的回复

20#

缱绻 发表于 2019-2-26 10:53
查一个学生
select * from student where 学生姓名='张三'
select * from student where 学生姓 in('张 ...

数据形成的是["01","02"],但是sql的  IN后面跟的是  (),不是[ ]

缱绻 数据领袖Lv6

发表于2019-2-26 11:06

只看该作者

取消 关注该作者的回复

21#

伶俐 发表于 2019-2-26 11:01
数据形成的是["01","02"],但是sql的  IN后面跟的是  (),不是[ ]

所以现在问题就是把[ ]换成()是不是就可以了呢。

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号