Db2 如何在WHERE子句中使用大小写表达式?

Db2 如何在WHERE子句中使用大小写表达式?,db2,Db2,我在WHERE子句中使用大小写表达式,如下所示: 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_

我在WHERE子句中使用大小写表达式,如下所示:

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表达式中,通过逻辑测试得到一个布尔值作为结果-rexpression
的右侧,然后

我通常在没有案例陈述的情况下这样做

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 
        )
只有一个
子句必须为true。虽然我希望看到两次这样的
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 
        )

1] 为自己省去一些将来的麻烦,并且总是让
FROM
引用一个保证有行的表,以及任何“可选的”
左连接(基本上,翻转一些当前引用)。2] 切勿使用
选择*
,始终明确列出输出列。3] 只要
as\u ADTR\u ID\u P
不为空,则“all”条件是不必要的<没有通配符的code>LIKE与
=
相同。4] 语法错误是什么?所需信息,可能是给你的一条重要线索。但是,我想它会抱怨
PARM\u ADTR\u ID
实际上没有被引用为主机变量。如果
PARM\u ADTR\u ID
应该是一个掩码,那么将
ALL
放入其中意味着
%
可能会让人困惑。那么如何使用它来搜索
'ALL'
的实际值呢?