我已经编写了一个选择查询,但只有当它满足某些条件时,我才需要过滤掉我的结果,而不是我仍然希望看到剩下的条件。
我尝试包括 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 语句是否是正确的方法。 谢谢。
通常,您希望避免在where
子句中case
表达式。 以下是两个简单的替代方案:
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
值,则可以轻松调整逻辑以处理此问题。
你不需要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'