SQL - sous-Requête en Fonction d'Agrégation

Je suis en utilisant la base de données northwind pour actualiser mes compétences SQL, par la création de plus ou moins de requêtes complexes. Malheureusement, je ne pouvais pas trouver une solution pour mon dernier cas d'utilisation:
"Obtenir la somme de cinq grands ordres pour chaque catégorie dans l'année 1997."

Les tables concernées sont:

Orders(OrderId, OrderDate)
Order Details(OrderId, ProductId, Quantity, UnitPrice)
Products(ProductId, CategoryId)
Categories(CategoryId, CategoryName)

J'ai essayé la requête suivante

SELECT c.CategoryName, SUM(
  (SELECT TOP 5 od2.UnitPrice*od2.Quantity 
   FROM [Order Details] od2, Products p2
   WHERE od2.ProductID = p2.ProductID
   AND c.CategoryID = p2.CategoryID
   ORDER BY 1 DESC))
FROM [Order Details] od, Products p, Categories c, Orders o 
WHERE od.ProductID = p. ProductID
AND p.CategoryID = c.CategoryID
AND od.OrderID = o.OrderID
AND YEAR(o.OrderDate) = 1997
GROUP BY c.CategoryName

Bien... Il s'est avéré que les sous-requêtes ne sont pas autorisés dans les fonctions d'agrégation. J'ai lu d'autres posts sur ce problème, mais ne pouvait pas trouver un solution pour mon cas d'utilisation spécifiques. J'espère que vous pourrez m'aider...

La version de SGBD que vous utilisez? Aussi votre question n'est pas correcte parce que l'ordre peut appartenir à plus d'une catégorie.
Je suis l'aide de MSSQL 2012. Si vous vous référez à la sous-requête, il y a une clause where - WHERE c.categoryID = p2.CategoryID - filtre pour une catégorie seulement.

OriginalL'auteur Thomas | 2013-05-01