JasperReports:如何根据布尔参数在SQL查询中添加WHERE语句?

JasperReports:如何根据布尔参数在SQL查询中添加WHERE语句?,sql,parameters,jasper-reports,where,Sql,Parameters,Jasper Reports,Where,如果我的布尔参数在JasperReports中为true,如何在SQL中添加sub where语句? 例如,我的SQL如下所示: SELECT * FROM shops WHERE region = "Canada" ORDER BY name 如果我的参数为true,我想在排序依据之前添加和isactive='Y' 有人知道我如何做到这一点吗?试试这个 select * from shops where region = "Canada" AND isActive = CASE WHEN @

如果我的布尔参数在JasperReports中为true,如何在SQL中添加sub where语句?
例如,我的SQL如下所示:

SELECT * FROM shops WHERE region = "Canada" ORDER BY name
如果我的参数为true,我想在排序依据之前添加
和isactive='Y'
有人知道我如何做到这一点吗?

试试这个

select * from shops where region = "Canada"
AND isActive = CASE WHEN @var = 'True' then 'Y' ELSE isActive END
order by name

您可以直接在SQL中执行此操作

SELECT * FROM shops WHERE region = "Canada"
AND (@param <> `True` OR isActive = 'Y')
-----^^^^^^^^^^^^^^^^--<< Condition: Your param is not true------
ORDER BY name
从region=“Canada”所在的商店中选择*
和(@param`True`或isActive='Y')

-----^^^^^^^^^^^^^^^^-- 您可以添加附加参数来设置附加子句值。之后,您可以在查询中使用语法

样本:



Hi rs,感谢您的快速回复。我试过了,但没用。据我所知,如果我的参数($P{param1})为false,则代码将为
和isActive=isActive
?@user1745968是如果参数为false,则代码将为
和isActive=isActive
,您会得到什么错误?错误是“执行SQL语句”错误。正如我所希望的,如果参数为false,则不会发生任何更改。您好@hims056,我尝试了
和($P{param}'True'或isActive='Y')
我也尝试了@,所有返回的错误“error executing SQL statement”都将超过允许的最大字符数。我只是粘贴where子句,并将参数(ExcludeClosedShops)更改为Y或N字符串。
where pos.ad_client_id=$P{client}和pos.ad_org_id in($P!{org})和pos.m_brand_id in($P!{brand})和pos c_activity_id in($P!{activity})和pos c_salesregion_id in($P!{REGION})和($P{closedHops})等于(“dsn”)或者pos.isActive='Y')、cash.isposorder='Y'和STATEMENTDATE介于$P{STARTDATE}和$P{ENDDATE}
顺便说一句,sql在没有额外的“and”和如下参数定义的情况下运行良好:我自己尝试的是
$P{excludedclosedshops}.equals(“Y”)?“和pos.isactive='Y'”:“
但也不起作用。非常感谢。这很有效。这个问题是由于!对于在执行查询之前编译的参数。