Column '%.*ls.%.*ls' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.

Error Message:
Msg 8121, Level 16, State 1, Line 1
Column ‘%.*ls.%.*ls’ is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.

Severity level:
16.

Description:
This error message appears when you try to use a column in the HAVING clause that does not appear in an aggregate function or in the GROUP BY clause.

Consequences:
The T-SQL statement can be parsed, but causes the error at runtime.

Resolution:
Errors of the Severity Level 16 are generated by the user and can be fixed by the SQL Server user. The statement cannot be executed this way. You must either use this column in an aggregate function or add it to the GROUP BY clause.

Versions:
All versions of SQL Server.

Example(s):
SELECT o.CustomerID, SUM(od.Quantity * (1 – od.Discount) * od.UnitPrice) AS Amount
  FROM Northwind.dbo.Orders o
  JOIN Northwind.dbo.[Order Details] od
    ON o.OrderID = od.OrderID
HAVING o.CustomerID = ‘LAZYK’

Remarks:
In the aabove example we try to use the column o.CustomerID in the HAVING clause. Because this columns does not appear in an aggregate function nor in the GROUP BY clause the error is raised.

]]>

Leave a comment

Your email address will not be published.