如何解决从 Case 语句返回条件/表达式
我四处搜索,似乎找不到解决我遇到的这个问题的方法。我有一个相当大的 case 语句(超过 100 行),它可以工作并返回我正在寻找的结果。该行的示例如下:
> print(dataframe)
date
0 None
> print(raw_value)
(datetime.date(2021,4,5),)
我有一个 case 语句,它按预期返回结果“Job”。我还想创建一个单独的 case 语句,该语句返回返回记录满足条件的条件,允许我评估哪些条件返回匹配(“作业”与“作业失败”比较)。我知道我可以复制我的 case 语句来输出满足的条件,但我想重复这个分析,并且正在寻找一个更容易复制的解决方案(类似于从上面的 case 语句中读取条件)。有什么想法吗?
解决方法
我最初将其作为评论发布,但它变得太长了。
您当前的 case 语句不需要第二个 description like '%job%fail%'
,您的第一个语句将捕获任何带有“作业失败”或仅使用 %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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。