我有一个case语句,我希望执行,但输出显示Missing Keyword。 请帮助我获得正确的输出。
CASE WHEN TRIM(STG.CLIENTCOUNTRY) in (select CPC_COUNTRY_CODE from ABC_DEVELOPER.EN_COUNTRY where COUNTRY_CODE='US')
THEN
(
DECODE(COALESCE(scl.abc_do_not_solict_telemarktg_fl,scl.ov_do_not_solicit_telemktg_fla,scl.vigo_do_not_solicit_telemktg_f),'Y',DECODE(sbs.optout_flag,'N','Y',NULL),NULL) opt_in_phone_flag,
DECODE(COALESCE(scl.abc_do_not_solict_telemarktg_fl,scl.ov_do_not_solicit_telemktg_fla,scl.vigo_do_not_solicit_telemktg_f),'Y',DECODE(sbs.optout_flag,'N',sbs.add_date,NULL),NULL) opt_in_phone_date,
'Y' opt_out_sms_flag,
sbs.add_date opt_out_sms_date,
NULL opt_in_sms_flag,
NULL opt_in_sms_date,
DECODE(COALESCE(scl.abc_do_not_share,scl.ov_do_not_share,scl.vigo_do_not_share),'Y',DECODE(sbs.do_not_share,'Y','Y',NULL),NULL) opt_out_share_flag,
DECODE(COALESCE(scl.abc_do_not_share,scl.ov_do_not_share,scl.vigo_do_not_share),'Y',DECODE(sbs.do_not_share,'Y',sbs.add_date,NULL),NULL) opt_out_share_date,
)
Else
(
Existing Code
)
有一个结束案例陈述。但是这部分代码存在一定的错误。我想知道更多关于单个then子句下的多个语句的行。
答案 0 :(得分:1)
CASE
是一个可用于定义单个行/列的值的函数。您不能使用它来添加或删除结果集中的列。这不是SQL的工作原理。
要使其工作,您需要为需要实现它的每个列重复CASE
逻辑。无论您是否打算使用它们,列都必须存在。在您希望忽略这些列的情况下,最好的解决方案就是将它们留给null
。
答案 1 :(得分:0)
"结束"声明丢失了 请查看官方文件
http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm
示例
SELECT cust_last_name,
CASE credit_limit WHEN 100 THEN 'Low'
WHEN 5000 THEN 'High'
ELSE 'Medium' END
FROM customers;
新修改
CASE
WHEN TRIM(STG.CLIENTCOUNTRY)
IN (SELECT CPC_COUNTRY_CODE FROM ABC_DEVELOPER.EN_COUNTRY WHERE COUNTRY_CODE='US')
THEN DECODE(COALESCE(scl.abc_do_not_solict_telemarktg_fl,scl.ov_do_not_solicit_telemktg_fla,scl.vigo_do_not_solicit_telemktg_f),'Y',DECODE(sbs.optout_flag,'N','Y',NULL),NULL)
ELSE 'existing code' opt_in_phone_flag,
WHEN TRIM(STG.CLIENTCOUNTRY)
IN (SELECT CPC_COUNTRY_CODE FROM ABC_DEVELOPER.EN_COUNTRY WHERE COUNTRY_CODE='US')
THEN DECODE(COALESCE(scl.abc_do_not_solict_telemarktg_fl,scl.ov_do_not_solicit_telemktg_fla,scl.vigo_do_not_solicit_telemktg_f),'Y',DECODE(sbs.optout_flag,'N',sbs.add_date,NULL),NULL)
ELSE 'existing code' opt_in_phone_date,
.
.
.
END