2013-05-20 53 views
1

我正在處理一個基於它應該有一個不同的where子句的基於一個參數的jasper報告。下面是我正在使用的查詢,但似乎有某處的語法錯誤。在where子句中有另一個sql語句的情況條件

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 
     ); 

我感謝所有幫助, 感謝

回答

1

您可以使用參數作爲佔位符動態創建查詢的任何部分。

1)假設你有一個參數,參數1是實際參數

2)創建另一個參數說參數2擁有像 $ P {}參數1 .longValue()== 1 的epression? 「和FIELD1 =」 : 「和字段1 =」

3)在查詢中使用參數2作爲佔位符現在

Select 
     blah blah 
    From 
     blah blha 
    Where 
     blah blah 
     $P!{param2} 

,根據參數1的值,你where子句可以像

 Where 
      blah blah 
      and field1= <exp1> 
     or 

     Where 
      blah blah 
      and field1= <exp2> 
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>不爲空。如果允許這樣做,則需要將其添加到邏輯中。