2016-09-27 4 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

'И 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 вы можете играть, чтобы продемонстрировать, где есть.

+0

Да, спасибо. Это была проблема – Slinky

Смежные вопросы