我尝试根据以下条件创建SQL Server查询:
查询重点关注三列:Report_Status,Error_Message和Create_Date。查询的目的是根据Create_Date过滤前100个最新结果。一旦完成,它需要查看前100名中的Report_Status中的每一行是否表示“失败”'并且Error_Message不包含' Placement缺少%'。
如果满足这些条件,则需要输出消息"潜在服务失败。"如果它不满足这些条件,那么它要么什么都不做要么输出正常的东西,比如"没有发现问题。"
我认为Case可能是最好的方法,所以我试了一下。但是,我无法让它工作:
select Report_Status, Error_Message, Create_Date,
case
when Report_Status = 'Failed' and Error_Message not like 'Placement is missing%' then 'Potential service failure.'
ELSE 'No problems found.'
end
from [AUDIT_TABLE] limit 100
这是解决此问题的最佳方法吗?如果是这样,我需要改变什么才能起作用呢?如果这不是一个好方法,那么解决问题的更好方法是什么?
答案 0 :(得分:1)
你似乎想要这样的东西:
select (case when count(*) = 100 then 'Potential service failure.'
else 'No problems found.'
end) as summary
from (select a.*
from [AUDIT_TABLE]
order by date desc
fetch first 100 rows only
) t100
where Report_Status = 'Failed' and
Error_Message not like 'Placement is missing%'
答案 1 :(得分:0)
我最终与同事一起解决了这个问题。 Gordon Linoff的CASE部分非常棒,但我们也使用Report_ID字段更改了搜索最近100条记录的方式。
select
(case when count(*) = 100 then 'Potential failure.'
else 'No problems found.'
end) as Result
from Audit_Table
where Report_Status = 'fail'
and Error_Message not like 'Placement is missing%'
and Report_ID >= (select min(Report_ID) from (select top 100 * from Audit_Table order by Report_ID desc ) t100)