Sql where子句中的Case语句

Sql where子句中的Case语句,sql,oracle,oracle11g,oracle10g,Sql,Oracle,Oracle11g,Oracle10g,在where子句中,我有两个选项1)状态='N'和类型='1'和2)状态='Y'和类型='1',基于参数,我需要执行一个选项: where case when (carName = :P_PARAMETER) then status = 'N' and type = '1' else status = 'Y' and type = '1' end 执行get error后,是否有解决此问题的解决方案或其他方法?您需要重写逻辑: wh

在where子句中,我有两个选项1)状态='N'和类型='1'和2)状态='Y'和类型='1',基于参数,我需要执行一个选项:

  where 
     case 
        when (carName = :P_PARAMETER) then  status = 'N' and type = '1'
        else status = 'Y' and type = '1'
     end

执行get error后,是否有解决此问题的解决方案或其他方法?

您需要重写逻辑:

where type = '1'
  AND ((status = 'N' AND carName = :P_PARAMETER))
        OR status = 'Y')

您需要重写逻辑:

where type = '1'
  AND ((status = 'N' AND carName = :P_PARAMETER))
        OR status = 'Y')

选项
type='1'
在这两种情况下都很常见,因此您可以将其排除在CASE语句之外(还因为尝试从CASE语句返回2个值在语法上是错误的):


选项
type='1'
在这两种情况下都很常见,因此您可以将其排除在CASE语句之外(还因为尝试从CASE语句返回2个值在语法上是错误的):

您可以使用
decode()
函数:

 where type = '1'  -- common for all cases
   and status= decode(carName,:P_PARAMETER,'N','Y')

您可以使用
解码()
功能:

 where type = '1'  -- common for all cases
   and status= decode(carName,:P_PARAMETER,'N','Y')

您会遇到什么错误?您会遇到什么错误?