2016-09-27 53 views
3

我知道这个问题已经被问了很多,但是当我解决了错误信息,并使用HAVING子句,我还是接受了可怕的:TSQL - 聚集在HAVING子句

An aggregate may not appear in the WHERE clause unless it is in a 
subquery contained in a HAVING clause or a select list, 
and the column being aggregated is an outer reference. 

我在做什么错了,在这里?

SELECT 
mr.ClubKeyNumber, 
COUNT(mr.MonthlyReportID), 
SUM(CONVERT(int,mr.Submitted)) 
FROM MonthlyReport mr 
WHERE mr.ReportYear = 2014 
AND COUNT(mr.MonthlyReportID) = 12 
GROUP BY mr.ClubKeyNumber 
HAVING (SUM(CONVERT(int,mr.Submitted))) > 11 
+3

您可能希望将此谓词COUNT(mr.MonthlyReportID)= 12'移至“HAVING”子句。 –

+3

'AND COUNT(mr.MonthlyReportID)= 12'将其添加到条款 –

回答

6

问题不在于你HAVING条款它在你的WHERE条款。

您的where子句的总count,试试这个:

SELECT 
mr.ClubKeyNumber, 
COUNT(mr.MonthlyReportID), 
SUM(CONVERT(int,mr.Submitted)) 
FROM MonthlyReport mr 
WHERE mr.ReportYear = 2014 
GROUP BY mr.ClubKeyNumber 
HAVING (SUM(CONVERT(int,mr.Submitted))) > 11 and COUNT(mr.MonthlyReportID) = 12 

where条款检查每一行group by子句前被聚合。它不能count您的MonthlyReportID直到group by所以将其移动到having clause

Here is a simple example你可以玩来证明哪里有vs。

+0

是的,谢谢。这是问题 – Slinky