我想向您寻求有关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%';
如果没有更多关于所涉及数据和最终结果的信息,我不确定我还能提供多少帮助。