我正在研究一个jasper报告,该报告采用一个参数,根据该参数,它应该有一个不同的where子句。下面是我正在使用的查询,但似乎某处存在语法错误。
select customer.name
customer_order.name
from customer, customer
where customer.orders > 0
and customer_order.customer_id = customer.id
and customer_order.name in
(
case when (<paramter> = 1) then ('order1', 'order2')
else (select order_name from customer_order)
end
);
我感谢任何帮助, 感谢
答案 0 :(得分:2)
您无法像这样编写查询。这是另一种选择:
where . . .
((<parameter> = 1) and customer_order.name in ('order1', 'order2') or
(<parameter> <> 1) and customer_order.name in (select order_name from customer_order)
)
这假设<parameter>
不是NULL。如果允许,则需要将其添加到逻辑中。
答案 1 :(得分:1)
您可以使用参数作为占位符动态创建查询的任何部分。
1)假设您有参数param1,它是实际参数
2)创建另一个参数说param2,其中包含epression $ P {param1} .longValue()== 1 ? “和field1 =” :“和field1 =”
3)在查询中使用param2作为占位符
Select
blah blah
From
blah blha
Where
blah blah
$P!{param2}
现在,根据你的where子句可能看起来像的param1值
Where
blah blah
and field1= <exp1>
or
Where
blah blah
and field1= <exp2>