[英]Decode with AND clause oracle
我想在我的查询中使用参数,但我无法处理它
我有3个大的选择raport,我只想使用参数代码的某些部分,这取决于选择
我有3种不同的Where条件
1
..WHERE A.CANCELLED = 'FALSE' AND a.open_amount!=0 AND A.IDENTITY = '&client_id'..
第2
...WHERE A.CANCELLED = 'FALSE' AND A.IDENTITY = '&client_id' ...
第3
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')
如何解决这个问题的任何提示?
你的意思是,如果第一个“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) )
这更具可读性,意图很明确,如果需要,它将更容易修改,......
你可以试试像 -
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
。 您应该根据您的数据将其更改为更适合您的任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.