2016-09-27 12 views
3

を有することを集約私はこの問題は多くのことを尋ねてきたが、私は、エラーメッセージに対処し、HAVING句を使用する場合、私はまだ恐ろしいを受けています知っている:TSQL - 句

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

問題は、それがあなたのWHERE句でありますあなたのHAVING句ではありません。あなたの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句の前に集約されています。 countMonthlyReportIDの後にgroup byの後に移動することはできませんのでhaving clauseに移動してください。

Here is a simple exampleあなたは対戦相手がどこにいるかを示すために遊ぶことができます。

+0

はい、ありがとうございます。それが問題だった – Slinky