sql >> Base de Datos >  >> RDS >> Sqlserver

SQL - Subconsulta en Función Agregada

Las subconsultas generalmente no están permitidas en funciones agregadas. En su lugar, mueva el agregado dentro la subconsulta. En este caso, necesitará un nivel adicional de subconsulta debido a los top 5 :

SELECT c.CategoryName,
  (select sum(val)
   from (SELECT TOP 5 od2.UnitPrice*od2.Quantity as val
         FROM [Order Details] od2, Products p2
         WHERE od2.ProductID = p2.ProductID
         AND c.CategoryID = p2.CategoryID
         ORDER BY 1 DESC
        ) t
  )
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, c.CategoryId