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

SQLServer基于前100个结果在查询中创建案例,sql,sql-server,case,limit,Sql,Sql Server,Case,Limit,我正在尝试根据以下条件创建SQL Server查询: 查询集中在三列:报告\状态、错误\消息和创建\日期。查询的目的是根据创建日期筛选前100个最新结果。完成后,它需要查看排名前100位的Report_Status中的每一行是否都显示“失败”,并且错误消息是否不包含“Placement is missing%” 如果它满足这些条件,则需要输出消息“潜在服务失败”。如果它不满足这些条件,那么它要么什么都不做,要么输出一些正常的东西,比如没有发现问题 我想用一个案例可能是最好的方法,所以我尝试了一下

我正在尝试根据以下条件创建SQL Server查询:

查询集中在三列:报告\状态、错误\消息和创建\日期。查询的目的是根据创建日期筛选前100个最新结果。完成后,它需要查看排名前100位的Report_Status中的每一行是否都显示“失败”,并且错误消息是否不包含“Placement is missing%”

如果它满足这些条件,则需要输出消息“潜在服务失败”。如果它不满足这些条件,那么它要么什么都不做,要么输出一些正常的东西,比如没有发现问题

我想用一个案例可能是最好的方法,所以我尝试了一下。但是,我很难让它工作:

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

这是解决这个问题的最好办法吗?如果是这样的话,我需要改变什么才能让它工作?如果这不是一个好方法,那么有什么更好的方法来解决这个问题呢?

您似乎想要这样的方法:

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%'

最后我和一个同事一起解决了这个问题。Gordon Linoff的案例部分很棒,但是我们通过使用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)

当我尝试该查询时,会出现一些语法错误。我在右括号附近得到了不正确的语法,其中,最后一个等号,而不是。如果我尝试运行它,它会在“limit”附近显示不正确的语法。我所做的就是按照你给我的,插入正确的表/列名。还有什么我遗漏了吗?我也继续手动键入查询,只是为了确保没有任何空格把事情弄糟,但我仍然会遇到上面提到的语法问题。好的,我刚刚意识到我无意中将其列为MySQL查询,而不是SQLServer查询。这会改变情况吗?唯一的区别是标准SQL子句FETCH FIRST 100 ROWS only在MySQL中是LIMIT 100,在查询结束时是LIMIT 100,在SQL Server的select子句中是TOP 100。@Jeremiahwillams。这个问题最初是为MySQL添加标签和标题的。使用报告ID是个好主意。不过,该子句不必如此复杂:在select top 100 report_id from audit_table order by report_id desc中使用report_id。但我更喜欢Gordon的from子句,因为它只访问表一次。