SELECT COUNT(*), (SELECT TOP 1 name FROM sys.objects ORDER BY object_id%number) name FROM master..spt_values WHERE number > 0 GROUP BY (SELECT TOP 1 name FROM sys.objects ORDER BY object_id%number)
Gives an error
You cannot use an aggregate or subquery in an expression used for a group on a GROUP BY clause list.
Maybe someone can answer why this is not allowed. Several ways that are valid
SELECT COUNT(*), oa.name FROM master..spt_values OUTER APPLY (SELECT TOP 1 name from sys.objects ORDER BY object_id%number) oa WHERE number > 0 GROUP BY oa.name
and
;WITH T AS ( SELECT number, (SELECT TOP 1 name from sys.objects ORDER BY object_id%number) name FROM master..spt_values WHERE number > 0 ) SELECT COUNT(*), name FROM T GROUP BY name
source share