How to use a CASE expression in the WHERE clause?

Gov*_*ind 4 db2 case

I am using a CASE expression in my WHERE clause like this:

SELECT *    
FROM    ASPECT.WR_AM_ADT_SUMM
INNER JOIN ASPECT.WR_AM_DLR_DTL
  ON    AS_CNTRY_CD = DD_CNTRY_CD AND 
        AS_DLR_CD = DD_DLR_CD AND 
        AS_YEAR = DD_YEAR
RIGHT JOIN ASPECT.DEALER_MASTER
  ON    COUNTRY_CD = AS_CNTRY_CD AND 
        DEALER_CDE_VEGA = AS_DLR_CD
WHERE
        COUNTRY_CD = '81930' AND 
        LANG_CD = '02' AND 
        (CASE PARM_ADTR_ID 
           WHEN 'ALL' THEN (AS_ADTR_ID_P IS NULL OR AS_ADTR_ID_P LIKE '%') 
           ELSE AS_ADTR_ID_P LIKE LOC_ADTR_ID 
        END) AND 
        DEALER_CDE_VEGA LIKE '8%'
        ;
Run Code Online (Sandbox Code Playgroud)

In the above query when I pass 'ALL' in PARM_ADTR_ID input parameter then first condition should work, otherwise the second condition should work.

As of now it's giving the syntax error, could anyone please tell me how to do this?

mus*_*cio 6

不能CASE以这种方式在 DB2 中使用表达式。CASE表达式的结果不能是布尔值。WHERE如果你盲目地翻译你的代码,你的子句可能看起来像这样:

WHERE
    COUNTRY_CD = '81930' AND 
    LANG_CD = '02' AND (
      ( PARM_ADTR_ID = 'ALL'  
        AND (AS_ADTR_ID_P IS NULL OR AS_ADTR_ID_P LIKE '%') ) 
       OR
      ( (PARM_ADTR_ID != 'ALL' OR PARM_ADTR_ID IS NULL)  
        AND AS_ADTR_ID_P LIKE LOC_ADTR_ID )
    ) AND 
    DEALER_CDE_VEGA LIKE '8%'
Run Code Online (Sandbox Code Playgroud)

但是,如果删除冗余条件,则可以像这样简化(HT 到 ypercube ??,谁醒得更早:)

WHERE
    COUNTRY_CD = '81930' AND 
    LANG_CD = '02' AND (
      PARM_ADTR_ID = 'ALL' OR AS_ADTR_ID_P LIKE LOC_ADTR_ID
    ) AND 
    DEALER_CDE_VEGA LIKE '8%'
Run Code Online (Sandbox Code Playgroud)