Tu puedes use GROUP BY SalesOrderID
. La diferencia es que con GROUP BY solo puede tener los valores agregados para las columnas que no están incluidas en GROUP BY.
Por el contrario, al usar funciones agregadas en ventana en lugar de GROUP BY, puede recuperar valores agregados y no agregados. Es decir, aunque no esté haciendo eso en su consulta de ejemplo, podría recuperar tanto OrderQty
individuales valores y sus sumas, conteos, promedios, etc. sobre grupos del mismo SalesOrderID
s.
Aquí hay un ejemplo práctico de por qué los agregados en ventana son geniales. Suponga que necesita calcular qué porcentaje de un total es cada valor. Sin agregados en ventana, primero tendría que derivar una lista de valores agregados y luego volver a unirla al conjunto de filas original, es decir, así:
SELECT
orig.[Partition],
orig.Value,
orig.Value * 100.0 / agg.TotalValue AS ValuePercent
FROM OriginalRowset orig
INNER JOIN (
SELECT
[Partition],
SUM(Value) AS TotalValue
FROM OriginalRowset
GROUP BY [Partition]
) agg ON orig.[Partition] = agg.[Partition]
Ahora mire cómo puede hacer lo mismo con un agregado en ventana:
SELECT
[Partition],
Value,
Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
FROM OriginalRowset orig
Mucho más fácil y limpio, ¿no?