SQLServer基于前100个结果在查询中创建案例

时间:2018-03-29 02:01:02

标签: sql sql-server case limit

我尝试根据以下条件创建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

这是解决此问题的最佳方法吗?如果是这样,我需要改变什么才能起作用呢?如果这不是一个好方法,那么解决问题的更好方法是什么?

2 个答案:

答案 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)