2016-10-02 97 views
0

我的碧玉report.I工作有一个表名为user我有2个参数internalexternal。当我使用内部然后我的查询需要显示的用户那里username LIKE '%[email protected]__%.__%',当我使用外部然后我的查询需要显示的用户那里username NOT LIKE '%[email protected]__%.__%'。就像当internal则报告将显示2,3,4,5排不出,当external然后报告将只显示一个row..My查询Case语句不工作在查询

SELECT case 
when $P{internal} = 'internal' then 

id end as cid, 
designation,division_name,pin_no,username FROM application_user where username  LIKE 
'%[email protected]__%.__%' 

else 
id end as cid, 
designation,division_name,pin_no,username FROM application_user where username NOT LIKE 
    '%[email protected]__%.__%' 

但它不起作用 enter image description here

请让我知道如果我不清除

+0

你发布的SQL是无效的:你有一个'ELSE'没有父'WHEN'或'IF'。第1行的'CASE WHEN'语句在第4行的END结尾处。 – Dai

+0

那么我应该怎么写 – USERRR5

+0

请将数据发布为文本,而不是图像。 –

回答

1

投影语句不能直接在SQL中进行参数化(但您可以在Dynamic SQL中显式执行)。

您的测试表达式应在WHERE块中评估,而不是SELECT。您发布的SQL无效并且无法运行,所以我很好奇你是如何获得所见结果的。

试试这个:

SELECT 
    id AS cid, 
    designation, 
    division_name, 
    pin_no, 
    username 
FROM 
    application_user 
WHERE 
    ($P{internal} = 'internal' AND username  LIKE '%[email protected]__%.__%') 
    OR 
    ($P{internal} <> 'internal' AND username NOT LIKE '%[email protected]__%.__%') 

注意,这并不一定会导致最佳的运行时执行计划,因为这取决于参数值不同的有效查询“形”的。理想情况下,你应该有两个不同的查询,你的应用程序代码选择了不同的username谓词。

+0

实际上,因为'like'包含所有这些通配符,所以很难阻止此查询执行全表扫描。所以,性能不是一个大问题。 –