La seguente query dovrebbe darti ciò che desideri:
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
Per capire perché ottieni risultati inaspettati, prova la tua query senza il GROUP BY
clausola:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM
#Foo
PIVOT
(SUM(Waste)
FOR Employee IN ([John], [Jim], [Alex])
) PVT
Risultato:
Store Sold John Jim Alex
Harrisburg 20,00 20,00 10,00 NULL
Seattle 20,00 NULL 10,00 10,00
Ora, riprova lo stesso con la seconda versione dei dati di esempio:
Risultato:
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
Confrontando i 2 diversi set di risultati puoi vedere chiaramente quel PIVOT
avviene per ogni combinazione di colonne non partecipanti, ovvero per ogni combinazione di Store
, Sold
.
Nel primo caso c'è solo Harrisburg,20,00
e Seattle,20,00
. Ecco perché in questo caso ottieni solo due righe. Nel secondo caso hai un totale di 3 + 2 =5 combinazioni.
Ora puoi capire perché GROUP BY
funziona solo nel secondo caso.