Sql 从Case语句返回条件/表达式
我到处寻找,似乎找不到解决这个问题的办法。我有一个相当大的case语句(超过100行),它可以工作并返回我要查找的结果。该行的一个示例如下:Sql 从Case语句返回条件/表达式,sql,case,Sql,Case,我到处寻找,似乎找不到解决这个问题的办法。我有一个相当大的case语句(超过100行),它可以工作并返回我要查找的结果。该行的一个示例如下: case When (Description like '%job%' or description like '%job%fail%') then 'Job' Else 'Not Classified' End as ATC 我有一个case语句,它按预期返回结果“Job”。我还想创建一个单独的case语句,该语句返回返回
case
When (Description like '%job%'
or description like '%job%fail%') then 'Job'
Else 'Not Classified'
End as ATC
我有一个case语句,它按预期返回结果“Job”。我还想创建一个单独的case语句,该语句返回返回记录满足的条件的条件,允许我评估哪些条件返回匹配(一个“job”与“job failed”比较)。我知道我可以复制我的案例陈述来输出满足的标准,但我想重复这一分析,并寻找一个更容易复制的解决方案(类似于从上述案例陈述中读取条件)。有什么想法吗?我最初是把这篇文章作为评论发表的,但它太长了 您当前的case语句不需要第二个
描述,如“%job%fail%”
,您的第一个语句将捕获任何带有“job failed”的内容,或仅包含%job%
的变体。这将防止您以任何方式复制案例,因为它将始终是第一个案例或else
语句。即使在纠正了该逻辑之后,确定满足哪种条件的唯一真正方法是调整条件的输出,以表示类似于Job-success
或Job-fail
的内容,或者创建另一个case语句,例如:
case
When Description like '%job%' then 'Success' --need something here to differentiate if %job% is "Job Failed" or not
When Description like '%fail%') then 'Fail' --or other qualifier better than %fail% if that can overlap with other text
Else 'No Qualifier'
End as ATC_Qualifier
如果您只是试图避免重复逻辑,那么可以将其封装在表表达式中
with matches as (
select *,
case when Description like '%job%fail%' then 1 -- most specific first
when Description like '%job%' then 2 -- least specific last
else 0
end as MatchCode
from ...
)
select *,
case when MatchCode > 0 then 'Job' Else 'Not Classified' End as ATC
from matches
用您正在使用的数据库标记您的问题。旁注:SQL中没有
CASE
语句(不包括特定于供应商的过程扩展)。您指的是一个大小写表达式。旁注:不要用单引号括起标识符,例如列别名。单引号用于字符串(和日期…)文本。如果标识符中有特殊字符,请使用双引号或特定于供应商的引号。您的意思是作为结果返回“job”还是使用“%job%”作为条件?旁注:SQL中没有CASE
语句(不包括特定于供应商的过程扩展)。你指的是一个CASE
表达式。所以我在过去的两个CASE表达式中创建了一个,一个返回“Job”,另一个返回“Job-%Job%”。这是可行的,但为分析增加了一些时间。你是说除了创建一个以原始条件为结果的附加case语句外,没有其他方法可以搜索case表达式的条件吗?