【问题标题】:Multiple conditions in a single Case statement单个 Case 语句中的多个条件
【发布时间】: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


【解决方案1】:

我认为对您来说最简单的答案是使用替换和修剪而不是大小写:

这是一个小例子:

declare @aaa as nvarchar(50)
set @aaa = N',MU DE LS & EUC,,'

select @aaa
select REPLACE(@aaa, '&', '&')
select REPLACE(REPLACE(@aaa, '&', '&'), ',,', ',')
--First trim is for removing the first comma, keep notice that i added a space at the end to keep the last comma, then i trimmed again the spaces
SELECT TRIM(TRIM(',' from (REPLACE(REPLACE(@aaa, '&', '&'), ',,', ',') + ' ')))

在你的情况下,你只需要这样做:

UPDATE OPTY
SET OPTY.LB_ENTITY_LIST = TRIM(TRIM(',' from (REPLACE(REPLACE(OPTY_LIST.LB_ENTITY_LIST, '&', '&'), ',,', ',') + ' ')))
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多