Группировать по подзапросу - PullRequest
4 голосов
/ 09 мая 2011

Каков наилучший способ сделать запрос T-SQL действительным:

select
    count(*),
    (... a subquery that returns one result ...) as [Bar]
from Foo foo
group by [Bar]

1 Ответ

7 голосов
/ 09 мая 2011
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)

Выдает ошибку

Невозможно использовать агрегат или подзапрос в выражении, используемом для группы по списку предложения 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  

и

;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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...