首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于在BIRT中使用的多个SQL标准的IF-ELSE替代方法

用于在BIRT中使用的多个SQL标准的IF-ELSE替代方法
EN

Stack Overflow用户
提问于 2014-01-12 01:36:15
回答 3查看 3.6K关注 0票数 3

我想用BIRT创建一个报告。我有5个SQL标准作为报告的参数。通常,当我有三个标准时,我使用嵌套的if-else作为带javascript的WHERE语句。

因为现在我有更多的条件,所以编写代码和检查可能性变得更加困难,特别是为了调试目的。

例如,员工的标准,有以下五个标准:年龄,城市,部门,职称和教育程度。所有标准都是动态的,您可以将其保留为空白以显示所有内容。

有人知道这种方法的替代方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-12 09:13:54

有一个神奇的方法来处理这个没有任何脚本,这使报告更容易维护!我们可以使用这种SQL查询:

代码语言:javascript
运行
AI代码解释
复制
SELECT *
FROM mytable
WHERE (?='' OR city=? )
AND (?=-1 OR age>? )
AND (?='' OR department=? )
AND (?='' OR title=? )

因此,每个条件都有两个dataset参数,其中有一个" or“子句,允许在参数获得特定值、空值或空值时忽略一个条件。所有这些"OR“子句都是用常值计算的,因此查询的性能不会受到影响。

在本例中,我们应该有4个报表参数、8个数据集参数(每个报表参数绑定到2个数据集参数)和0脚本。请参见使用此方法这里的报表示例。

如果有更多的条件,我建议使用存储过程,因此,我们可以这样做,只有一个数据集参数的每个标准。

整数参数处理

如果我们需要处理一个整数列的"all“值,例如age:我们可以将报表参数"age”声明为字符串类型,而dataset参数"age“则声明为整数。然后,在dataset的参数选项卡中,使用值表达式而不是“链接到报表参数”。例如,如果我们喜欢同时处理"all“"null”和空值的健壮输入,这里是要输入的表达式:

代码语言:javascript
运行
AI代码解释
复制
(params["age"].value=="all" || params["age"].value=="" || params["age"].value==null)?-1:params["age"].value

示例报告可以下载这里 (v4.3.1)

票数 3
EN

Stack Overflow用户

发布于 2014-01-13 06:27:14

根据报告的要求和听众,你可能会发现这是有帮助的。

使用文本框参数并使defualt值%(这是一个外卡)

代码语言:javascript
运行
AI代码解释
复制
SELECT *
FROM mytable
WHERE city like ? 
  AND age like ?
  AND department like ?
  AND title like ?

这还允许用户搜索部分名称。如果城市文本框中的值为%ville%,它将返回城市名称中任何地方都有"ville“的所有城市。

票数 2
EN

Stack Overflow用户

发布于 2014-01-12 05:12:36

如果要包含在SQL子句中的报表参数将按照某些命名约定命名,例如query_employee_table列名,则可以以通用方式编写Java代码,以便在添加新记者时不必对其进行更改。

对于params中的每个param,{ if param.name以query_employee_ { where_clause +=和“+ param.name.substring(after query_employee) +”==‘+ param.value +’;}开始

您必须检查参数的类型,才能决定是否必须引用参数值。

事件处理程序可以如下所示(用Java实现,但如果您确实需要将它移植到JavaScript中,则应该可以在JavaScript中实现):

代码语言:javascript
运行
AI代码解释
复制
public class WhereConditionEventHandler extends DataSetEventAdapter {

    @Override
    public void beforeOpen(IDataSetInstance dataSet,
            IReportContext reportContext) throws ScriptException {
        super.beforeOpen(dataSet, reportContext);
        String whereClause = " where 1 = 1 ";
        SlotHandle prms = reportContext.getDesignHandle().getParameters();
        for (int i = 0; i < prms.getCount(); i++) {
            if (prms.get(i) instanceof ScalarParameterHandle) {
                ScalarParameterHandle prm = (ScalarParameterHandle) prms.get(i);
                int n = prm.getName().indexOf("sql_customer_");
                if (n > -1) {
                    String prmValue = "" + reportContext.getParameterValue(prm.getName());
                    if (DesignChoiceConstants.PARAM_TYPE_STRING.equals(prm.getDataType())) {
                        prmValue = "'" + prmValue + "'";
                    }
                    whereClause += " and " + prm.getName().substring("sql_customer_".length()) + " = " + prmValue;
                }
            }
        }
        System.out.println("sql: " + whereClause);
        dataSet.setQueryText(dataSet.getQueryText() + whereClause);
    }
}

顺便说一下,您可以在BIRT报表设计中传递未注册为报表参数的参数。尽管如此,BIRT还是会将它们放入"params“数组中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21073182

复制
相关文章
vim查找高亮关键字_emacs和vim
如果我们在在打开的文件中使用Vim搜索功能并开启搜索高亮显示后怎么取消当前高亮显示搜索关键字呢?
全栈程序员站长
2022/11/09
2.3K0
Tramp 使用指南
Tramp 是 Emacs 中用来编辑远端文件的模块,全称为『Transparent Remote (file) Access, Multiple Protocol』,类似于 VSCode 的 Remote Development,只不过比它年长 20 岁而已😄。这篇文章就来介绍下 tramp 的使用方式与注意事项。 使用方式 在使用 find-file 打开文件时,使用下面的语法,即可打开远端的文件: /method:user@host#port:path/to/file 比如, /ssh:vagrant
飞驰的西瓜
2022/07/26
9100
Tramp 使用指南
Emacs的Server Client模式
Emacs的server/client模式只需要加载一次配置文件,所以打开文件会快一些。
ExASIC
2022/03/29
9390
vim的编辑模式,命令模式以及vim的实践
vim编辑模式:               从一般模式进入编辑模式,只需按i、I、a、A、o、O、r和R中的某一个键即可,当进入编辑模式时,在屏幕的尾行显示INSERT字样(若支持中文,则显示插入)。按Esc键,从编辑模式回到一般模式。              i(小写) 从目前光标所在处插入。              I (大写)从目前光标所在处第一个非空格开始插入。              a 从光标所在处的下一个字符开始插入。              A 从光标所在处行的最后一个字符卡是插入
叶瑾
2018/06/14
1.6K0
Vim 模式
Vim和Vi一样具有三种模式:命令模式(Command mode),插入模式(Insert mode)和底线命令模式(Last line mode)。
Yif
2019/12/26
5580
Emacs 快捷键配置方案
Emacs 的快捷键和 Vim 的快捷键是编辑器中的两坐高山,其中 Emacs 的快捷键主要有四类。
zucchiniy
2020/05/22
1.2K0
Writer.com基于图的RAG向量检索替代方案
Writer 首席执行官 May Habib 说,其语义图形化方法是使用向量数据库对 RAG 进行区块划分过程的替代方案。
云云众生s
2024/03/28
2250
如何排查 Tramp 卡住问题
今天在进行一个操作时,突然出现了访问 tramp 的操作,最近有一段时间没有使用过,所以看到这个消息时比较好奇,是什么操作导致触发了 tramp。
飞驰的西瓜
2023/09/06
2150
如何排查 Tramp 卡住问题
onpropertychange替代方案[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 onpropertychange替代方案
全栈程序员站长
2022/08/01
1.4K0
5个最受Linux程序员欢迎的代码编辑器
Linux程序员经常抱怨,自从他们使用了免费开源的系统平台后,作为一名程序员,却并没有在代码编辑器上得到足够的重视。他们往往会认为Linux平台上的代码编辑器太少了,以至于影响他们的编程工作。但是事实并非如此,在Linux平台上有太多的代码编辑器供你使用了,下面我们分享了5个最受Linux程序员欢迎的代码编辑器,继续在编程的路上前行吧!
CPP开发前沿
2022/06/04
1.1K0
5个最受Linux程序员欢迎的代码编辑器
Emacs 系列(一):抛掉一切,投入 Emacs 和 org 模式的怀抱
长期以来,我一直对如何组织安排事情感到沮丧。我也有用过 GTD 和 ZTD 之类的方法,但是像邮件或是大型文件这样的事务真的很难来组织安排。
用户1880875
2021/09/23
8460
Base:Acid的替代方案
作者:DAN PRITCHETT 译者:java达人 来源:https://queue.acm.org/detail.cfm?id=1394128(点击阅读原文前往) 在数据库分区中,以一致性换取可
java达人
2018/03/26
2.3K0
Base:Acid的替代方案
Hugo .GitInfo 的替代方案
今天有人问我博客页脚 footer 里的 git hash 是怎么显示的,就是页面底部里的 69d6ffe 这一串数字。
eallion
2022/12/20
1.9K0
Hugo .GitInfo 的替代方案
Web 框架的替代方案
在本系列第二部分中,Noam 提出了一些模式,说明如何直接用 Web 平台作为框架提供的一些解决方案的替代方案。
深度学习与Python
2022/04/19
2.6K0
进入编辑模式 , vim命令模式 , vim实践
所谓编辑模式就是进入可以编辑文件内容的状态,就和进入word文档进入记事本是一样的,最普遍进入编辑模式的方式就是按i,即进入当前光标所在位置的编辑模式。下面介绍几种进入编辑模式的方式:
端碗吹水
2020/09/23
2.2K0
进入编辑模式 , vim命令模式 , vim实践
Emacs 29.1 版本发布了
作为日常使用 Emacs 进行开发的重度用户,困扰笔者的一个问题时,同时打开多个项目时, xref 会错乱,这十分烦人,忍受一段时间后,最终去 SO 提问[2]了一下,Emacs 又一次没令我失望,29 里面已经有了解法:
飞驰的西瓜
2023/09/06
5790
Emacs 29.1 版本发布了
vim常用模式
# Vim的命令模式 使用 Vim 编辑文件时,默认处于命令模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。 # Vim的输入模式 在输入模式下,Vim 可以对文件执行写操作,类似于在 Windows 系统的文档中输入内容。 使 Vim 进行输入模式的方式是在命令模式状态下输入 i、I、a、A、o、O 等插入命令(各指令的具体功能如表 3 所示),当编辑文件完成后按 Esc 键即可返回命令模式。 # Vim 的编辑模式 编
summerking
2022/09/19
2610
探讨if...else的替代方案
假设我们要做一个计算器,实现加减乘除的需求。使用if...else...语句实现代码如下:
互联网金融打杂
2022/08/01
2.3K0
探讨if...else的替代方案
Flutter 中FlatButton的替代方案
最新版本的Flutter已将FlatButton标记为过时,我们可以使用 TextButton 或 ElevatedButton 来进行替代,FlatButton 与替代组件的参数会有差异。
xiangzhihong
2023/07/09
6710
Emacs 29快到了!我们能期待什么
几个小时前宣布,Emacs 29 的分支现在从 master 分支中切掉了!这意味着该emacs-29分支从现在起将不再接收任何新功能,而只会接收错误修复。
飞驰的西瓜
2022/12/14
2.6K0
Emacs 29快到了!我们能期待什么

相似问题

如何在vim中找到模式和替代

20

模式后的csplit拆分的替代方案。

10

不同的vim颜色方案取决于模式

10

基于USB的持久Debian系统Debian实况的替代方案

60

HUD的替代方案

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文