A consulta a seguir deve fornecer o que você deseja:
SELECT Store,
TotalSold,
[John] AS WastedByJohn,
[Jim] AS WastedByJim,
[Alex] AS WastedByAlex
FROM (SELECT Store, Employee, Waste,
SUM(Sold) OVER (PARTITION BY Store) AS TotalSold
FROM #Foo) src
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Para entender por que você obtém resultados inesperados, tente sua consulta sem o
GROUP BY
cláusula:SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Saída:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Agora, tente o mesmo novamente com a segunda versão dos dados de amostra:
Saída:
Store Sold John Jim Alex
Harrisburg 25,00 10,00 NULL NULL
Harrisburg 30,00 10,00 NULL NULL
Harrisburg 40,00 NULL 10,00 NULL
Seattle 50,00 NULL 10,00 NULL
Seattle 60,00 NULL NULL 10,00
Ao comparar os 2 conjuntos de resultados diferentes, você pode ver claramente que
PIVOT
ocorre para cada combinação de colunas que não participam dela, ou seja, para cada combinação de Store
, Sold
. No primeiro caso, há apenas
Harrisburg,20,00
e Seattle,20,00
. É por isso que você obtém apenas duas linhas neste caso. No segundo caso, você tem um total de 3 + 2 =5 combinações. Agora você pode ver por que
GROUP BY
funciona apenas no segundo caso.