Følgende forespørgsel skulle give dig, hvad du ønsker:
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
For at forstå hvorfor du får uventede resultater, prøv din forespørgsel uden GROUP BY
klausul:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Output:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Prøv nu det samme igen med anden version af eksempeldata:
Output:
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
Ved at sammenligne de 2 forskellige resultatsæt kan du tydeligt se den PIVOT
finder sted for hver kombination af kolonner, der ikke deltager i den, dvs. for hver kombination af Store
, Sold
.
I det første tilfælde er der kun Harrisburg,20,00
og Seattle,20,00
. Derfor får du kun to rækker i dette tilfælde. I det andet tilfælde har du i alt 3 + 2 =5 kombinationer.
Du kan nu se hvorfor GROUP BY
virker kun i det andet tilfælde.