2016-09-27 4 views
3

Ich weiß, das Problem viel gefragt wurde, aber wenn ich die Fehlermeldung Adresse und eine HAVING-Klausel verwenden, erhalte ich immer noch die gefürchtete:TSQL - Aggregates in Mann, die

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. 

Was soll ich tun falsch, hier?

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

Wahrscheinlich möchten Sie dieses Prädikat 'COUNT (mr.MonthlyReportID) = 12' in die' HAVING'-Klausel verschieben. –

+3

'AND COUNT (mr.MonthlyReportID) = 12' fügen Sie es zu Having Klausel –

Antwort

6

Das Problem ist nicht mit Ihrer HAVING Klausel es WHERE Klausel in Ihrer ist.

Sie haben ein Aggregat count in Ihrer where Klausel, versuchen Sie dies:

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 

Die where Klausel überprüft jede Zeile vor der Klausel group by aggregiert werden. Es kann nicht count Ihre MonthlyReportID bis nach die group by so verschieben Sie es auf die having clause.

Here is a simple example können Sie mit spielen, um zu demonstrieren, wo vs haben.

+0

Ja, danke. Das war das Problem – Slinky