La requête suivante devrait vous donner ce que vous voulez :
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
Pour comprendre pourquoi vous obtenez des résultats inattendus, essayez votre requête sans le GROUP BY
clause :
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Sortie :
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Maintenant, réessayez la même chose avec la deuxième version des exemples de données :
Sortie :
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
En comparant les 2 ensembles de résultats différents, vous pouvez clairement voir que PIVOT
a lieu pour chaque combinaison de colonnes qui n'y participent pas, c'est-à-dire pour chaque combinaison de Store
, Sold
.
Dans le premier cas, il n'y a que Harrisburg,20,00
et Seattle,20,00
. C'est pourquoi vous n'obtenez que deux lignes dans ce cas. Dans le second cas, vous avez un total de 3 + 2 =5 combinaisons.
Vous pouvez maintenant comprendre pourquoi GROUP BY
ne fonctionne que dans le second cas.