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?
不能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)
归档时间: |
|
查看次数: |
26183 次 |
最近记录: |