TSQL - HAVING子句中的聚合

Sli*_*nky 3 t-sql sql-server aggregate where-clause

我知道这个问题已经被问了很多但是当我解决错误消息并使用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.
Run Code Online (Sandbox Code Playgroud)

我做错了什么,在这里?

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
Run Code Online (Sandbox Code Playgroud)

Eoi*_*inS 6

问题不HAVING在于您的WHERE条款中的条款.

countwhere子句中有一个聚合,试试这个:

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
Run Code Online (Sandbox Code Playgroud)

where子句检查在group by子句之前聚合的每一行.它不能countMonthlyReportID,直到之后group by所以它移动到having clause.

这是一个简单的例子,您可以使用它来演示vs的位置.