J'essaie d'écrire une requête qui renvoie le pourcentage total moyen en utilisant toutes les lignes de pourcentage.
J'ai des difficultés à calculer le pourcentage moyen total à l'aide de la fonction AVG car le champ transmis utilise une autre fonction SUM qui calcule le pourcentage par ligne.
Ejemplo:
SELECT
-- Row Percent Value
CONVERT(DECIMAL(5,4), 1.0 * SUM([col1]+[col2]+[col3]+[col4]+[col5]) / SUM([total])) AS 'Percent Row',
-- total rows average percent -- This part does not work
AVG(CONVERT(DECIMAL(5,4), 1.0 * SUM(CASE WHEN [col0] = 'Y' THEN [total] ELSE 0 END) / SUM([total])))
Je reçois un message d'erreur :
Cannot perform an aggregate function on an expression containing an aggregate or a subquery.
J'apprécierais toute aide sur la façon de contourner ce problème, tout commentaire est le bienvenu.
UPDATE
Voici ma requête actuelle (sans la moyenne)
SELECT
'Totals',
CAST(CAST(SUM(CASE WHEN Gender = 'F' THEN Total ELSE 0 END) AS DECIMAL) / CAST(SUM(Total) AS DECIMAL) AS FLOAT) AS 'OA F'
FROM RecordCount rc WITH(NOLOCK)
INNER JOIN Record r WITH(NOLOCK)
ON r.RecordId = rc.RecordId
WHERE
(rc.RecordId IN ('00001','00002'));
La moyenne doit être incluse dans une autre colonne, juste après 'OA F'. C'est la requête qui permet d'obtenir la moyenne et je ne sais pas comment l'introduire correctement dans la requête existante, principalement parce qu'elle utilise d'abord la fonction SUM, puis la AVG :
SELECT AVG(o.[Avg%])
FROM
(
SELECT CAST(SUM(i.bnh + i.aa + i.[pi] + i.h + i.tmr)) AS DECIMAL)/ SUM(i.total) as [Avg%]
FROM rc i
) AS o
Toute aide est la bienvenue.