De volgende vraag zou u moeten geven wat u zoekt:
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
Probeer uw zoekopdracht zonder de GROUP BY
. om te begrijpen waarom u onverwachte resultaten krijgt clausule:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Uitvoer:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Probeer nu hetzelfde opnieuw met de tweede versie van voorbeeldgegevens:
Uitvoer:
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
Door de 2 verschillende resultatensets te vergelijken, kun je duidelijk zien dat PIVOT
vindt plaats voor elke combinatie van kolommen die er niet aan deelnemen, d.w.z. voor elke combinatie van Store
, Sold
.
In het eerste geval is er alleen Harrisburg,20,00
en Seattle,20,00
. Daarom krijg je in dit geval maar twee rijen. In het tweede geval heb je in totaal 3 + 2 =5 combinaties.
Je kunt nu zien waarom GROUP BY
werkt alleen in het tweede geval.