我正在处理jasper报告。我有一个名为user
的表我有2个参数internal
,external
。当我使用内部时,我的查询需要向用户显示{ {1}}当我使用外部时,我的查询需要向用户显示username LIKE '%_@__%.__%'
。与username NOT LIKE '%_@__%.__%'
时相同,然后报告将显示2,3,4,5没有行以及何时{{1}然后报告将只显示一行..我的查询是
internal
如果我不清楚,请告诉我
答案 0 :(得分:1)
投影语句不能直接在SQL中进行参数化(但显然你可以在动态SQL中)。
您的测试表达式应在WHERE
块中进行评估,而不是SELECT
。您发布的SQL无效且无法运行,因此我很好奇您如何获得您所看到的结果。
试试这个:
SELECT
id AS cid,
designation,
division_name,
pin_no,
username
FROM
application_user
WHERE
( $P{internal} = 'internal' AND username LIKE '%_@__%.__%' )
OR
( $P{internal} <> 'internal' AND username NOT LIKE '%_@__%.__%' )
请注意,这不一定会产生最佳的运行时执行计划,因为不同的有效查询&#34;形状&#34;取决于参数值。理想情况下,应该由应用程序代码选择具有不同username
谓词的两个不同查询。