La siguiente consulta debería darte lo que quieres:
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 comprender por qué obtiene resultados inesperados, pruebe su consulta sin GROUP BY
cláusula:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Salida:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Ahora, vuelva a intentar lo mismo con la segunda versión de los datos de muestra:
Salida:
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
Al comparar los 2 conjuntos de resultados diferentes, puede ver claramente que PIVOT
tiene lugar para cada combinación de columnas que no participan en él, es decir, para cada combinación de Store
, Sold
.
En el primer caso solo hay Harrisburg,20,00
y Seattle,20,00
. Es por eso que solo obtienes dos filas en este caso. En el segundo caso tienes un total de 3 + 2 =5 combinaciones.
Ahora puedes ver por qué GROUP BY
funciona solo en el segundo caso.