Case语句不适用于查询

时间:2016-10-02 06:25:18

标签: sql postgresql

我正在处理jasper报告。我有一个名为user的表我有2个参数internalexternal。当我使用内部时,我的查询需要向用户显示{ {1}}当我使用外部时,我的查询需要向用户显示username LIKE '%_@__%.__%'。与username NOT LIKE '%_@__%.__%'时相同,然后报告将显示2,3,4,5没有行以及何时{{1}然后报告将只显示一行..我的查询是

internal

但它不起作用 enter image description here

如果我不清楚,请告诉我

1 个答案:

答案 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谓词的两个不同查询。