参数为空取全部数据的几种做法

简介: 当通过多个参数对数据进行过滤并且不选择某个参数时,希望依然能够查询出其他带条件的数据,也就是参数为空时忽略掉该条件,点击 <a href="http://c.raqsoft.com.cn/article/1543386793666?r=IBelieve" target="_blank" rel="n...

润乾报表中支持用户通过参数对数据过滤,而当多个条件联合查询时,如果某个条件没有输入值,用户会希望该条件失效,也就是条件为空则视为没有这个条件,取出所有满足其它条件的数据。
例如,按照地区查询,参数值输入东北,则报表展示如下:
1

如该参数为空,则结果如下:
2

下面通过一个订单信息表来看下该需求的实现过程。
首先在报表设计器中制作一个网格式报表,如图:
3

并在该报表的基础上增加两个参数用于数据过滤:
4

area:用于接收参数对地区进行过滤
amount:接收参数对订单金额过滤
接下来更改数据集,增加参数过滤,如图:
5
6

在 sql 语句中,条件写法为:(货主地区 =? or ? is null),在对应的参数表达式中写上两个相同的参数名(area),表示如果 area 参数有值,则用货主地区 =area 条件过滤数据,否则执行 or 参数 is null,这样参数为空时后边条件成立,取出所有数据。
注意:
1、 参数表达式中内容和 sql 语句中的问号要一一对应,此处可以写重复名称。
2、 如果有多个条件过滤数据,则用括号将每组条件括起来。
通过上述操作,可以实现用户的需求。在实际使用中,用户希望货主地区能够传递多个地区,一次查询出多个地区数据,比如要同时查询华北和东北地区数据,对于此种方式,需要将对应参数类型更改为数组方式,并且更改 sql 语句中的条件写法。
将 area 参数类型更改成字符串组,并更改 sql 语句中语法为:
7
如多选方式,sql 中要用 in (?) 方式。
现在预览报表,如果 area 参数为空,则取出所有地区数据,如下图:
8

但是当 area 参数多选时会报错,如下图:
9

主要原因:如参数类型是数组方式,参数值是多个时,sql 中的问号会自动根据值的个数解析出多个,这样 or 后边多个问号会出现语法错误。
解决办法:将 or 后对应的参数用 string 函数强制转换成字符串格式即可,如:
10

再次预览报表即能取出正确结果。
注意:
一:当数据为 db2 时,使用 or ? is null 会出错,此时需要更改 sql 语句为 cast(? as varchar(10)) is null) 把这个 varchar 改成数据库中的类型即可, 需要对参数进行类型转换 。
二:当参数类型为数组形式,按照上边做法使用 string()函数转换时,有可能数组值太多导致 sql 报错,此时可改成:where ( 货主地区 in (?) or ? =’!EOF’),在参数表达式中写入 if(@area==” OR @area==null ,’!EOF’),此种做法是如果参数为空则给对应的问号处返回!EOF,这样就取出所有数据了,同理,DB2 问题也可以用此种方式实现。
可以看到,数据集的参数表达式处不仅能够直接写参数,而且还可以写润乾的函数对参数值先行处理,将处理后的结果再传递到 sql 中进行过滤。回顾一下,我们首先解决的了单一参数值为空时,忽略该条件的问题;然后通过数组类型解决了参数中同时传递多个值的问题;最后通过分析,利用润乾报表可以在参数表达式中写函数的方式,彻底解决了传递多个参数值可能会遇到的问题。

作者:gxy
链接:http://c.raqsoft.com.cn/article/1543386793666?r=IBelieve
来源:乾学院
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
Web App开发 JavaScript 前端开发
Window 10 安装python 3.7 + selenium (附最新安装包)
Window 10 安装python 3.7 + selenium (附最新安装包)
425 0
|
3月前
|
JSON 搜索推荐 算法
利用API提升电商用户体验:个性化推荐系统
在电商竞争激烈的当下,个性化推荐系统成为提升用户粘性与转化率的关键。本文详解如何通过API集成高效接入先进推荐算法,实现实时精准推荐,优化用户体验,提升业务增长。
156 0
|
8月前
|
机器学习/深度学习 PyTorch TensorFlow
YOLOv11改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务
YOLOv11改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务
317 12
YOLOv11改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务
|
算法
鬼手操控着你的手机?大模型GUI智能体易遭受环境劫持
【9月更文挑战第27天】近年来,随着人工智能技术的发展,多模态大语言模型(MLLM)在图形用户界面(GUI)中广泛应用,提升了交互体验。然而,最新研究《环境警示:多模态智能体易受环境干扰》指出,这些智能体可能因环境干扰而行为失准。作者通过实验展示了即使是强大模型也会受无关因素影响,导致不可靠或不可预测的行为。研究还证实,通过环境注入攻击可进一步加剧此问题。尽管如此,多模态GUI智能体依然潜力巨大,未来需改进感知能力和算法以增强鲁棒性,解决环境干扰问题。论文详细内容见:https://arxiv.org/abs/2408.02544。
175 8
|
关系型数据库 MySQL 数据库
【MySQL】:超详细MySQL完整安装和配置教程
【MySQL】:超详细MySQL完整安装和配置教程
41887 5
|
12月前
|
存储 SQL 关系型数据库
MySQL 给查询结果增列并自定义列数据
MySQL 给查询结果增列并自定义列数据
1496 2
|
前端开发 人机交互
langchain 入门指南 - ReAct 模式
langchain 入门指南 - ReAct 模式
536 1
|
机器学习/深度学习 缓存 分布式计算
我们来看一个简单的Python代码示例,它使用`joblib`模块来并行执行一个函数:
我们来看一个简单的Python代码示例,它使用`joblib`模块来并行执行一个函数:
|
数据管理 关系型数据库 数据库
web2py,一个好用的开源Web应用框架!
web2py,一个好用的开源Web应用框架!
292 1
|
存储 缓存 算法
【专栏】探讨分布式限流所面临的挑战以及目前业界常用的解决方案
【4月更文挑战第27天】在互联网时代,分布式限流是应对高并发、保护系统稳定的关键。它面临数据一致性、算法准确性和系统可扩展性的挑战。常见限流算法有令牌桶、漏桶和滑动窗口。解决方案包括使用分布式存储同步状态、结合多种算法及动态调整阈值。定期压力测试确保策略有效性。随着系统规模增长,限流技术将持续发展,理解并应用限流原理对保障服务质量至关重要。
280 3