Estou usando uma CASE
expressão na minha WHERE
cláusula assim:
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%'
;
Na consulta acima, quando eu passo o parâmetro 'ALL'
de PARM_ADTR_ID
entrada, a primeira condição deve funcionar, caso contrário, a segunda condição deve funcionar.
A partir de agora está dando o erro de sintaxe, alguém poderia me dizer como fazer isso?
Você não pode usar a
CASE
expressão no DB2 dessa maneira. O resultado de umaCASE
expressão não pode ser um valor booleano. SuaWHERE
cláusula pode ser algo assim, se alguém traduzisse cegamente seu código:No entanto, se você remover as condições redundantes, pode ser simplificado assim (HT para ypercubeᵀᴹ, que acorda mais cedo :)