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)
donne l'erreur
Impossible d'utiliser un agrégat ou d'un sous-requête dans une expression utilisée pour le groupe par liste d'une clause GROUP BY.
Peut-être que quelqu'un d'autre peut répondre pourquoi cela n'est pas autorisé. Un couple de façons valables
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
et
;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
S'il vous plaît expliquer ce que la requête est censé faire. –
Son censé être le regroupement par le résultat d'une sous-requête. Je l'ai simplifié pour que vous n'ayez pas à lire autant. – cbp
@cbp - croyez-moi, Martin le sait * beaucoup *. Peut-être pourriez-vous poster des exemples de données et de résultats attendus. Cela éclaircirait les choses. Pour commencer, je ne vois aucune raison pour laquelle vous incluez la table 'Office'. Cela me semble redondant. –