执行sql server查询时出错

执行sql server查询时出错,sql,sql-server-2008,Sql,Sql Server 2008,我使用此查询时出错 select dbresultsid, TestCase, BuildID, Analyzed, Verdict, (select count(Verdict) from results where BuildID = 'Beta1' and Verdict = 'PASS') AS PASS, (select count(Verdict) from results where BuildID = 'Beta1'

我使用此查询时出错

select dbresultsid, TestCase, BuildID, Analyzed,
     Verdict, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'PASS') AS PASS, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'FAIL') AS FAIL, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'INCONC') AS INCONC, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'TIMEOUT') AS TIMEOUT 
from results 
where BuildID = 'Beta1'       
group by TestCase,dbresultsid 
order by Analyzed
上面说

“results.BuildID”列在中无效 选择列表,因为它不是 包含在聚合中的 函数或GROUPBY子句。”

同样的查询在MYSQL中运行良好。有人能帮忙吗


谢谢,

如果在查询中使用Group By,则必须将所有非聚合函数的列添加到Group By子句中。因此,将BuildID添加到GROUPBY子句和所有其他没有聚合的列(如Verdict等),它就可以工作了


有关更多详细信息,请参见。

SQL Server中的Group By子句允许列位于Group By子句中,如果需要其他列,则需要通过聚合函数(如MAX、MIN等)访问它们。

您必须聚合BuildID和分析的列,或者将它们添加到Group By子句中。 还要注意的是,你现在这样做的效率非常低

看看如何通过只执行一次表扫描来提高性能
在几百个代码中,您需要将代码更改为:

select dbresultsid, TestCase, BuildID, Analyzed,
     Verdict, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'PASS') AS PASS, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'FAIL') AS FAIL, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'INCONC') AS INCONC, 
     (select count(Verdict) from results where BuildID = 'Beta1' 
             and Verdict = 'TIMEOUT') AS TIMEOUT 
from results 
where BuildID = 'Beta1'       
group by TestCase,dbresultsid, BuildID, Analyzed
order by Analyzed

当您将BuildID筛选为仅一个值时,SQL Server要求在group by列表中指定它。

group by means-按列出的字段对结果进行分组,并对其余字段执行一些聚合函数(求和、平均…)。没有count()或avg()或sum()的所有内容都必须在group by中

但是,看起来您混合了两个不同的查询。如果对于给定的BuildId,每个判决都需要大量记录,那么查询就是:

select BuildID, Verdict, count(*)
group by BuildID, Verdict

如果这不是您想要的,您应该描述您试图实现的目标

为什么我需要将所有列添加到group by或order by?这是MSSQL服务器的设计方式吗?我不需要在MySQL中添加这样的内容。是的,就是这样。在MSSQL中你必须这样做,在MySQL中你不需要这样做。你可以看看这里吗请@ck:谢谢你美化我的SQL代码谢谢你的建议。我最近从MYSQL迁移到MSSQL,你提供的链接非常有用。你能看看这里吗