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

Error Message:
Msg 8120, Level 16, State 1, Line 1
Column ‘%.*ls.%.*ls’ is invalid in the select list 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 SELECT list 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

Remarks:
In the above example er try to use the column o.CustomerID in the SELECT list. Because this column does neither appear in an aggregate function nor in the GROUP BY clause, the error is raised.

To successfully execute the statement, you must rewrite it. The following two statements are syntactically valid:

SELECT MIN(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
 
–and

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
 GROUP BY o.CustomerID

However, you need to verify on the logical level if they return the expected resultset.

]]>

Leave a comment

Your email address will not be published.