案例陈述还是子查询?



我已经编写了一个选择查询,但只有当它满足某些条件时,我才需要过滤掉我的结果,而不是我仍然希望看到剩下的条件。

我尝试包括 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' 

最新更新