带有CASE子句的WHERE语句返回一个值或所有其他值



我想向您寻求有关WHERE子句中CASE语句的帮助。

如果除法的描述(IC.description(也包含"%SEMI%",我希望获得值为"SEMI"的SEMI_GV列所在的行。这实际上是有效的,但如果列SEMI_GV的值与"SEMI"不同(例如GV或NULL(,我不确定如何返回除"SEMI’之外的所有值。下面是我尝试过的代码,但实际上它不起作用,因为我不确定在第二个THEN语句之后应该使用什么来过滤其他内容。

...
WHERE 
procur.SEMI_GV LIKE
CASE 
WHEN IC.[Description] LIKE '%semi%' THEN 'SEMI'
WHEN IC.[Description] NOT LIKE '%semi%' THEN ???
END

提前感谢您的支持!

编辑:我想过滤掉的结果表是这个

KUNNR   NAME1   LAND1   BRAN1   VKORG   VTWEG   SPART   ZTERM   Resp_FAM    Description MAIL    SEMI_GV POSITION
0050000001  Dummy account   GB  11002   1101    10  00  ECCP    GCN UK Inside Sales email.address@example.com   NULL    BC
0050000001  Dummy account   GB  11002   1101    10  00  ECCP    GCN UK Inside Sales email.address@example.com   SEMI    BC

在where子句中,我只想根据条件返回一行:

  • 如果描述包含";SEMI";并且SEMI_GV包含SEMI,则返回此行(第二行(
  • 如果"描述"包含其他内容,则返回此行(第一行(

WHERE子句适用于描述中包含"semi"的情况,但我尝试设置另一个条件,如:

WHERE 
procur.POSITION = 'BC'
AND
procur.SEMI_GV LIKE
CASE 
WHEN IC.[Description] LIKE '%semi%' THEN 'SEMI'
WHEN IC.[Description] NOT LIKE '%semi%' THEN 
CASE 
WHEN SEMI_GV IS NOT NULL THEN 'GV'
ELSE NULL

然而,我不能通过NULL值,因为";"喜欢";开头的语句。

从我所能收集到的信息来看,当IC.[Description]列包含"半";以及当它没有时的不同结果集(但集中到一个数据表中(。

如果我解释正确,你可能会更好地查看UNION,即

SELECT *
FROM MyTable
WHERE procur.SEMI_GV = 'SEMI' 
AND IC.[Description] LIKE '%semi%'
UNION ALL
SELECT * 
FROM MyTable 
WHERE procur.SEMI_GV != 'SEMI' 
OR IC.[Description] NOT LIKE '%semi%';

如果没有更多关于所涉及数据和最终结果的信息,我不确定我还能提供多少帮助。

相关内容

最新更新