多值模糊查询报表的制作
在数据查询系统中,经常会涉及到模糊查询和多值查询。对于模糊查询,我们可能都有所了解。就是根据用户在参数框中输入的关键字进行模糊匹配,这在SQL中是通过like条件实现的。而多值查询则大多是一次在参数框中输入2个以上关键词,以字符串组,整数组等形式进行参数传递,这在SQL中是通过in条件完成多值匹配的。
但是用户的需求往往是无止境的!最典型就是把这两种好使的方法结合起来,也就是两种查询的结合–在参数框中输入多个关键字,根据多个关键字进行模糊查询。比如,用户要根据产品名称进行多值模糊查询,当输入为“奶酪,糖”时,希望找出产品名称中含有奶酪或糖的产品列表,如下图所示:
为了程序猿哥哥可以早日跟加班say goodbye , 不再做单身汪(咦?为什么我这么热心?),让我们一起了解一下润乾报表是怎么做到两种查询的完美结合的……
一共需要……1、2、3、4步:
1.定义主表模板:
其中
1-3行设置行属性为报表头,其余行为数据区即可。
B3单元格表达式为:=macro1,目的是显示查询条件的拼接结果,以便校验最终数据是否正确。
A5单元格表达式为:=ds1.select(产品ID),目的是取数ds1结果集中所有的产品。
B5-F5 单元格表达式为:=ds1.字段名称,目的是根据前面的产品编号取出对应的产品信息
2.定义参数:
其中
cpmc是普通参数,就是用户填入的查询值;
macro1是动态参数,根据cpmc拼接查询条件,值表达式为:if(cpmc == null or cpmc==””,”1=1″,”产品名称 like ‘%”+replace(@cpmc,”,”,”%’ or 产品名称 like ‘%”)+”%'”)。这里的动态参数,它不仅是用于在报表结果页面里面显示查询条件的拼接结果,而且也用于对sql进行数据筛选。
再详细说明一下:当cpmc为空时,返回1=1,表示查询全部数据,否则先用字符串替换函数replace()把参数中的”,”替换为”%’ or 产品名称 like ‘%”)+”%'”(注意其中的空格),替换后的结果再和前后字符串拼接得到最终的查询条件。例如当用户输入“奶酪,糖”,那么replace的替换结果就是“奶酪%’ or 产品名称 like ‘%糖%’,再和前后字符串拼接得到最终结果为 产品名称like ‘%奶酪%’ or产品名称 like ‘%糖%’。
3.定义数据集:
这里在查询条件中用到了参数的特殊用法${参数名},相当于一个占位的效果,查询时会用前面定义的动态参数内容填充到这个位置。
注:第2 – 3步的设置均在主表模板中添加。
4.定义参数模板:
在报表工具设计区域右侧的属性栏中将B2的单元格web变量名设置为cpmc。
Bingo,多值模糊查询就这样完美地实现了!
回顾
我们来回顾一下其中遇到的问题和解决的技巧:
1、数据集SQL实现动态取数:
使用参数的${参数名}用法
2、 查询条件为空,查询全部:
使用参数1=1的用法
3、多值匹配:
以“,”分割多个查询关键字,拼接成多个 or 相连的like条件。
最后我们发现,其实这里仅仅用了润乾报表的参数特殊用法和SQL 查询条件的拼接,是不是一不小心,又双叒叕get了新技能?这样下去,用不了多久是不是就可以拒绝加班,拒绝做单身汪了,窃喜吧。
快来加入润乾大家庭,get更多快速简便的报表制作方式吧。
转载请注明:润乾技术博客 » 多值模糊查询报表的制作
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
[JSConf EU 2018] 大脑控制 Javascript
先解释,本人为前端菜鸟,之前也未参加过类似的活动,没有翻译过什么文章,此次是好奇心使然,也是想尝试下,学习学习,英文很烂,全靠有道,但是视频整个看下来,还是很有收获的,现在来分享一下! 主题:Explore alternative interactions 本文主要探索的是交互。 日常的生活离不开交互,我们的智能手环、语音输入、感应系统、面部识别、生物反馈全都是比较新型的交互方式。 回归到最初的生物活动: 当你想走路的时候,这个信号触发大脑产生信号,大脑再把信号传递给身体,身体得到信号,才会有走路这个动作。 作者就根据这样一个最基本的原理,自己写了一个Epoc.js;后台使用C++,Node.js加载项,使用Javascript实时访问数据,获取面部表情,根据获取到的表情,来控制键盘。 传感器的感应点 模拟的键盘与感应设备 代码分享: 目前的一些限制 技术限制 1.当用户第一次使用的时候,需要培训; 2.不能追踪一切; 3.延迟;它必须关注和检查当前脑电波之间的所有时间差异,以及它所知道的所有模式,所以在思考和聚焦之间有一个延迟。 用户体验的限制 1.无法实现真正的无缝互动:作为开发人...
- 下一篇
[剑指offer] 栈的压入、弹出序列
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) 解题思路 模拟堆栈操作的过程,将原数列依次压栈,把栈顶元素与所给出栈队列相比,如果相同则出栈,如果不同则继续压栈,直到原数列中所有数字压栈完毕。最后,检测栈中是否为空,若空,说明出栈队列可由原数列进行栈操作得到。否则,说明出栈队列不能由原数列进行栈操作得到。 参考代码 import java.util.ArrayList; import java.util.Stack; public class Solution { public boolean IsPopOrder(int [] pushA,int [] popA) { if(pushA.length != popA.length || pushA.length == 0 || popA.length == 0) return ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8