执行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,你提供的链接非常有用。你能看看这里吗