案例陈述还是子查询?

时间:2019-09-27 10:48:36

标签: sql oracle

我已经写了一个选择查询,但是仅当结果符合某些条件(我仍然希望看到剩余的条件)时,才需要过滤掉结果。

我尝试过包括where(当x = y和a = b然后= 1否则0结束的情况)= 1,但这会返回我不想包含的数据。

 gl.col1,
 gl.col2,
 gl.voucher_type,
 gl.reference_serie Reference_Series,
 .
 .
 .
from table1 gl

where (case 
         when gl.voucher_type = '0' and gl.reference_serie='PUR ORDER' 
                  then 1 ELSE 0 end) =1

原因是,如果您查看代码,我想排除凭证类型为0且参考意向为'PUR ORDER'的任何内容,但假设是否有凭证类型0但我想查看的参考意向不同它。 我知道我的案例中有=而不是<>,但这是为了演示我试图查找以排除它的内容。

我没有任何错误,我不确定接下来的步骤以及CASE语句是否是正确的方法。 谢谢。

2 个答案:

答案 0 :(得分:0)

您不需要case-when

 gl.col1,
 gl.col2,
 gl.voucher_type,
 gl.reference_serie Reference_Series,
 .
 .
 .
from table1 gl

where gl.voucher_type = '0' and gl.reference_serie='PUR ORDER' 

答案 1 :(得分:0)

通常,您要避免在case子句中使用where表达式。这是两个简单的选择:

where not (gl.voucher_type = '0' and gl.reference_serie = 'PUR ORDER')

where gl.voucher_type <> '0' or gl.reference_serie <> 'PUR ORDER'

请注意,这些过滤器会过滤出NULL值-您的表单不会。如果列具有NULL值,则可以轻松地调整逻辑以处理该问题。