Följande fråga bör ge dig vad du vill ha:
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
För att förstå varför du får oväntade resultat, pröva din fråga utan GROUP BY
klausul:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Utdata:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Försök nu samma sak igen med andra versionen av exempeldata:
Utdata:
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
Genom att jämföra de två olika resultatuppsättningarna kan du tydligt se den PIVOT
sker för varje kombination av kolumner som inte deltar i den, d.v.s. för varje kombination av Store
, Sold
.
I det första fallet finns det bara Harrisburg,20,00
och Seattle,20,00
. Det är därför du bara får två rader i det här fallet. I det andra fallet har du totalt 3 + 2 =5 kombinationer.
Du kan nu se varför GROUP BY
fungerar bara i det andra fallet.