[英]SQL Server : update boolean column based on conditions from 2 other columns
[英]SQL UPDATE based on conditions of other columns
我正在尝试执行以下操作。
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
不知道是否可以通过这种方式使用大小写,我基本上是在尝试根据其他第三个具有数据的列中的其他三个列中的一个来更新值。
谢谢
您不需要多个CASE
语句,而是使用带有多个WHEN
表达式的单个Case
语句
试试这个
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
这不是case语句的工作方式。 案例陈述就像对WHEN THEN的一系列检查一样。 有点像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)), '')
);
是。 但是,如果您不想更改该值,则将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, '')
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.