繁体   English   中英

用AND子句oracle解码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM