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)
Run Code Online (Sandbox Code Playgroud)
给出错误
无法在GROUP BY子句列表中使用的表达式中使用聚合或子查询.
也许其他人可以回答为什么不允许这样做.有两种方法是有效的
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
Run Code Online (Sandbox Code Playgroud)
和
;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
Run Code Online (Sandbox Code Playgroud)