我想在查询中使用参数,但我无法处理它
我有3个大选择raport,我只是想使用参数来代替某些代码,这取决于选择
我有3种不同的Where条件
第一
..WHERE A.CANCELLED = 'FALSE' AND a.open_amount!=0 AND A.IDENTITY = '&client_id'..
第二
...WHERE A.CANCELLED = 'FALSE' AND A.IDENTITY = '&client_id' ...
第三
WHERE AND A.CANCELLED = 'FALSE' AND a.invoice_amount != a.open_amount AND A.IDENTITY = '&client_id'
我尝试使用解码,但我想如果在第二种情况下有价值可能没问题,但是没有,我不能像这样解码
WHERE decode(xxx,x1,'AND a.open_amount!= 0',x2,'',x3, 'AND a.invoice_amount != a.open_amount')
我应该如何解决这个问题?
答案 0 :(得分:2)
你的意思是,如果第一个“where condition”或第二个或第三个是/为TRUE,你想要整体为TRUE(选择行),你是否正在寻找一种简化的方法来编写它?也就是说,不用简单地将它们与OR组合?
要实现这一点,您不需要CASE和嵌套CASE语句或DECODE。你可以这样做:
WHERE A.CANCELLED = 'FALSE'
AND A.IDENTITY = '&client_id'
AND ( (xxx = x1 AND a.open_amount != 0) OR (xxx = x2) OR
(xxx = x3 AND a.invoice_amount != a.open_amount) )
这更具可读性,意图很明确,如果需要可以更容易修改,......
答案 1 :(得分:1)
你可以试试像 -
WHERE A.CANCELLED = 'FALSE'
AND A.IDENTITY = '&client_id'
AND a.open_amount <>
(CASE
WHEN x1 THEN 0
WHEN x2 THEN a.open_amount + 1 -- This needs to be something that is always TRUE, to nullify the condition
WHEN x3 THEN a.invoice_amount
END);
修改:这是基于a.open_amount
是NUMBER
的假设,并使用快速黑客来创建一个始终TRUE
条件,如x <> x + 1
。您应该根据您的数据将其更改为更适合您的任何内容。