【发布时间】:2021-06-26 14:07:32
【问题描述】:
我有如下 SQL 更新语句:
UPDATE OPTY
SET OPTY.LB_ENTITY_LIST =
CASE WHEN SUBSTRING(OPTY_LIST.LB_ENTITY_LIST, 1, 1) = ','
THEN REPLACE(OPTY_LIST.LB_ENTITY_LIST,
SUBSTRING(OPTY_LIST.LB_ENTITY_LIST, 1, 1), '')
ELSE OPTY_LIST.LB_ENTITY_LIST
END
FROM SALES_DTM_PBI.dbo.TD_OPPORTUNITY OPTY
LEFT JOIN #TMP_LB_ENTITY_LISTPerOptyConcatenated OPTY_LIST ON
OPTY.ID_TECH_OPTY = OPTY_LIST.ID_TECH_OPTY
UPDATE OPTY
SET OPTY.LB_ENTITY_LIST =
CASE WHEN OPTY.LB_ENTITY_LIST LIKE '%&%'
THEN REPLACE(OPTY.LB_ENTITY_LIST, '&', '&')
ELSE OPTY.LB_ENTITY_LIST
END
FROM SALES_DTM_PBI.dbo.TD_OPPORTUNITY OPTY
UPDATE OPTY
SET OPTY.LB_ENTITY_LIST = CASE
WHEN OPTY.LB_ENTITY_LIST LIKE '%,,%'
THEN REPLACE(OPTY.LB_ENTITY_LIST, ',,', ',')
ELSE OPTY.LB_ENTITY_LIST
END
FROM SALES_DTM_PBI.dbo.TD_OPPORTUNITY OPTY
但我想要一个更新语句。我在#TMP_LB_ENTITY_LISTPerOptyConcatenated 中为LB_ENTITY_LIST 获取的数据是MU DE LS & EUC,,,但我想要在TD_OPPORTUNITY 中的数据是MU DE LS & EUC,。因为它有& 和,, 的多个条件,所以我写了两个更新语句,好像我会给出一个case 语句和多个when,那么如果一些LB_ENTITY_LIST 有两个东西& 和,,就像我展示的那样,它只会采用第一个 when 语句的情况,然后它会结束。
那么有什么方法可以通过使用单个案例来完成。这样我就不必使用多个更新语句。
【问题讨论】:
-
CASE是一个返回单个原子值的表达式(如a+b)——不是语句! -
@marc_s yaa 我知道,但我要问的是,如果数据具有 case 语句的多个条件,那么如何使该数据满足所有情况。如果我在 SUBSTRING(LB_ENTITY_LIST,1,1) =',' 时提出一个案例,那么当 LB_ENTITY_LIST 像 '%&%' 时 REPLACE(LB_ENTITY_LIST,SUBSTRING(LB_ENTITY_LIST,1,1),'') 然后 REPLACE(LB_ENTITY_LIST ,'&','&') when LB_ENTITY_LIST like '%,,' then REPLACE(LB_ENTITY_LIST,',,',',') else LB_ENTITY_LIST 现在如果数据遵循两种情况第一个以及第二个,那么它将只满足第一个条件并移动到结束
标签: sql-server