Você pode use
GROUP BY SalesOrderID
. A diferença é que com GROUP BY você só pode ter os valores agregados para as colunas que não estão incluídas em GROUP BY. Por outro lado, usando funções agregadas em janela em vez de GROUP BY, você pode recuperar valores agregados e não agregados. Ou seja, embora você não esteja fazendo isso em sua consulta de exemplo, você pode recuperar
OrderQty
individuais valores e suas somas, contagens, médias etc. em grupos do mesmo SalesOrderID
s. Aqui está um exemplo prático de por que as agregações em janela são ótimas. Suponha que você precise calcular qual é a porcentagem de um total de cada valor. Sem agregações em janela, você teria que primeiro derivar uma lista de valores agregados e depois juntá-la de volta ao conjunto de linhas original, ou seja, assim:
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]
Agora veja como você pode fazer o mesmo com um agregado em janela:
SELECT
[Partition],
Value,
Value * 100.0 / SUM(Value) OVER (PARTITION BY [Partition]) AS ValuePercent
FROM OriginalRowset orig
Muito mais fácil e limpo, não é?