当前位置: 首页 > news >正文

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

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

例如,按照地区查询,参数值输入东北,则报表展示如下:

1jpg

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

2jpg

下面通过一个订单信息表来看下该需求的实现过程。

首先在报表设计器中制作一个网格式报表,如图:

3jpg

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

4jpg

area:用于接收参数对地区进行过滤

amount:接收参数对订单金额过滤

接下来更改数据集,增加参数过滤,如图:

5jpg

6jpg

在 sql 语句中,条件写法为:(货主地区 =? or ? is null),在对应的参数表达式中写上两个相同的参数名(area),表示如果 area 参数有值,则用货主地区 =area 条件过滤数据,否则执行 or 参数 is null,这样参数为空时后边条件成立,取出所有数据。

注意:

1、 参数表达式中内容和 sql 语句中的问号要一一对应,此处可以写重复名称。

2、 如果有多个条件过滤数据,则用括号将每组条件括起来。

通过上述操作,可以实现用户的需求。在实际使用中,用户希望货主地区能够传递多个地区,一次查询出多个地区数据,比如要同时查询华北和东北地区数据,对于此种方式,需要将对应参数类型更改为数组方式,并且更改 sql 语句中的条件写法。

将 area 参数类型更改成字符串组,并更改 sql 语句中语法为:

7jpg

如多选方式,sql 中要用 in (?) 方式。

现在预览报表,如果 area 参数为空,则取出所有地区数据,如下图:

8jpg

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

9jpg

主要原因:如参数类型是数组方式,参数值是多个时,sql 中的问号会自动根据值的个数解析出多个,这样 or 后边多个问号会出现语法错误。

解决办法:将 or 后对应的参数用 string 函数强制转换成字符串格式即可,如:

10jpg

再次预览报表即能取出正确结果。

注意:

一:当数据为 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 中进行过滤。回顾一下,我们首先解决的了单一参数值为空时,忽略该条件的问题;然后通过数组类型解决了参数中同时传递多个值的问题;最后通过分析,利用润乾报表可以在参数表达式中写函数的方式,彻底解决了传递多个参数值可能会遇到的问题。


详情链接:http://c.raqsoft.com.cn/article/1543386793666

相关文章:

  • Chisel3 - 基本数据类型
  • 实验五 编写调试具有多个段的程序
  • JSAAS 平台实现 微信类似的TOKEN机制
  • kafka集群Controller竞选与责任设计思路架构详解-kafka 商业环境实战
  • Linux C编程之一:Linux下c语言的开发环境
  • 写给高年级小学生看的《Bash 指南》
  • Windows10下 tensorflow-gpu 配置
  • 前端模板技术面面观(2)
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 操作系统-进程控制
  • 区块链在刚刚领域引起行业革新
  • pages bookmarks for machine learning domain
  • 2019年值得关注的八大DevOps趋势
  • JS 日期转换,格式化等常用的函数定义
  • AlphaZero进化论:从零开始,制霸所有棋类游戏
  • 【译】JS基础算法脚本:字符串结尾
  • bootstrap创建登录注册页面
  • conda常用的命令
  • CSS相对定位
  • ES6 ...操作符
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Java Agent 学习笔记
  • java第三方包学习之lombok
  • LeetCode29.两数相除 JavaScript
  • Netty源码解析1-Buffer
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • spring boot 整合mybatis 无法输出sql的问题
  • SQL 难点解决:记录的引用
  • vue-router 实现分析
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 三分钟教你同步 Visual Studio Code 设置
  • 探索 JS 中的模块化
  • 通信类
  • postgresql行列转换函数
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​secrets --- 生成管理密码的安全随机数​
  • ​虚拟化系列介绍(十)
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • ###C语言程序设计-----C语言学习(3)#
  • #define用法
  • $ git push -u origin master 推送到远程库出错
  • (11)MATLAB PCA+SVM 人脸识别
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (九)One-Wire总线-DS18B20
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .Net组件程序设计之线程、并发管理(一)
  • .stream().map与.stream().flatMap的使用
  • [AIGC] Spring Interceptor 拦截器详解
  • [AR]Vumark(下一代条形码)
  • [C++]——带你学习类和对象
  • [Codeforces] number theory (R1600) Part.11