Sql 从Case语句返回条件/表达式

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语句(超过100行),它可以工作并返回我要查找的结果。该行的一个示例如下:

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表达式的条件吗?