如何在 WHERE 子句中使用 CASE 表达式?
How to use a CASE expression in the WHERE clause?
我在 WHERE 子句中使用 CASE 表达式,如下所示:
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%'
;
在上面的查询中,当我在 PARM_ADTR_ID 输入参数中传递 'ALL' 时,第一个条件应该有效,否则第二个条件应该有效。
截至目前它给出了语法错误,谁能告诉我该怎么做?
我不相信您可以进行逻辑测试,结果是 case 表达式中 THEN
右侧的 result- rexpression 作为布尔值.
我通常在没有 case 语句的情况下这样做
WHERE
COUNTRY_CD = '81930'
and LANG_CD = '02'
and DEALER_CDE_VEGA LIKE '8%'
and ( PARM_ADTR_ID = 'ALL'
or AS_ADTR_ID_P LIKE LOC_ADTR_ID
)
只有一个 OR
子句需要为真。虽然我希望像这样看到 PARM_ADTR_ID
两次:
WHERE
COUNTRY_CD = '81930'
and LANG_CD = '02'
and DEALER_CDE_VEGA LIKE '8%'
and ( PARM_ADTR_ID = 'ALL'
or AS_ADTR_ID_P LIKE parm_adtr_id
)
我在 WHERE 子句中使用 CASE 表达式,如下所示:
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%'
;
在上面的查询中,当我在 PARM_ADTR_ID 输入参数中传递 'ALL' 时,第一个条件应该有效,否则第二个条件应该有效。
截至目前它给出了语法错误,谁能告诉我该怎么做?
我不相信您可以进行逻辑测试,结果是 case 表达式中 THEN
右侧的 result- rexpression 作为布尔值.
我通常在没有 case 语句的情况下这样做
WHERE
COUNTRY_CD = '81930'
and LANG_CD = '02'
and DEALER_CDE_VEGA LIKE '8%'
and ( PARM_ADTR_ID = 'ALL'
or AS_ADTR_ID_P LIKE LOC_ADTR_ID
)
只有一个 OR
子句需要为真。虽然我希望像这样看到 PARM_ADTR_ID
两次:
WHERE
COUNTRY_CD = '81930'
and LANG_CD = '02'
and DEALER_CDE_VEGA LIKE '8%'
and ( PARM_ADTR_ID = 'ALL'
or AS_ADTR_ID_P LIKE parm_adtr_id
)