Die folgende Abfrage sollte Ihnen das geben, was Sie wollen:
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
Um zu verstehen, warum Sie unerwartete Ergebnisse erhalten, versuchen Sie Ihre Abfrage ohne GROUP BY
Klausel:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Ausgabe:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Versuchen Sie es jetzt noch einmal mit der zweiten Version der Beispieldaten:
Ausgabe:
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
Durch den Vergleich der 2 verschiedenen Ergebnismengen können Sie diesen PIVOT
deutlich erkennen findet für jede Kombination von nicht daran beteiligten Spalten statt, also für jede Kombination von Store
, Sold
.
Im ersten Fall gibt es nur Harrisburg,20,00
und Seattle,20,00
. Deshalb erhalten Sie in diesem Fall nur zwei Zeilen. Im zweiten Fall haben Sie insgesamt 3 + 2 =5 Kombinationen.
Sie können jetzt sehen, warum GROUP BY
funktioniert nur im zweiten Fall.