我正在尝试执行以下操作。
UPDATE account
SET new_finalleadsource =
CASE WHEN
new_jtrack_source IS NOT NULL AND new_jtracksource <> ''
THEN new_jtrack_source
CASE WHEN
new_jtrackofflinesource IS NOT NULL AND new_jtrackofflinesource <> ''
THEN new_jrackofflinesource
CASE WHEN
new_leadsource IS NOT NULL AND new_leadsource <> ''
THEN new_leadsource
ELSE NULL
END
不确定是否可以这种方式使用大小写,我基本上是尝试使用其他3列中的1列来更新列,具体取决于具有数据的第一列。
由于
答案 0 :(得分:1)
您不需要多个CASE
语句,而是使用带有多个Case
表达式的单WHEN
个语句
试试这种方式
UPDATE account
SET new_finalleadsource = CASE
WHEN new_jtrack_source IS NOT NULL
AND new_jtracksource <> '' THEN new_jtrack_source
WHEN new_jtrackofflinesource IS NOT NULL
AND new_jtrackofflinesource <> '' THEN new_jrackofflinesource
WHEN new_leadsource IS NOT NULL
AND new_leadsource <> '' THEN new_leadsource
ELSE NULL
END
答案 1 :(得分:1)
这不是case语句的工作原理。案例陈述就像是对当时的一系列检查。有点像C开关,在每个WHEN之前休息一下。所以你想要的是
UPDATE account
SET new_finalleadsource =
CASE
WHEN new_jtrack_source IS NOT NULL AND new_jtracksource <> '' THEN new_jtrack_source
WHEN new_jtrackofflinesource IS NOT NULL AND new_jtrackofflinesource <> '' THEN new_jrackofflinesource
WHEN new_leadsource IS NOT NULL AND new_leadsource <> '' THEN new_leadsource
ELSE NULL
END
我认为以下(基于戈登的答案)是最强大的解决方案:
UPDATE account
SET new_finalleadsource =
COALESCE(NULLIF(LTRIM(RTRIM(new_jtrack_source)), ''),
NULLIF(LTRIM(RTRIM(new_jrackofflinesource)), ''),
NULLIF(LTRIM(RTRIM(new_leadsource)), '')
);
答案 2 :(得分:1)
是。但是,如果您不想更改该值,请将else
更改为else new_finalleadsource
。
撰写声明的一种方法是:
UPDATE account
SET new_finalleadsource = (CASE WHEN new_jtrack_source IS NOT NULL AND new_jtracksource <> ''
THEN new_jtrack_source
WHEN new_jtrackofflinesource IS NOT NULL AND new_jtrackofflinesource <> ''
THEN new_jrackofflinesource
WHEN new_leadsource IS NOT NULL AND new_leadsource <> ''
THEN new_leadsource
ELSE NULL
END);
另一种方法是使用COALESCE()
和NULLIF()
:
UPDATE account
SET new_finalleadsource = COALESCE(NULLIF(new_jtrack_source, ''),
NULLIF(new_jrackofflinesource, ''),
NULLIF(new_leadsource, '')
);