Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Não obtendo os valores corretos de SOMA no SQL Server 2012 ao usar um PIVOT


A consulta a seguir deve fornecer o que você deseja:
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

Para entender por que você obtém resultados inesperados, tente sua consulta sem o GROUP BY cláusula:
SELECT Store, Sold, [John], [Jim], [Alex]
FROM 
    #Foo
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

Saída:
Store       Sold    John    Jim     Alex
Harrisburg  20,00   20,00   10,00   NULL
Seattle     20,00   NULL    10,00   10,00

Agora, tente o mesmo novamente com a segunda versão dos dados de amostra:

Saída:
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

Ao comparar os 2 conjuntos de resultados diferentes, você pode ver claramente que PIVOT ocorre para cada combinação de colunas que não participam dela, ou seja, para cada combinação de Store , Sold .

No primeiro caso, há apenas Harrisburg,20,00 e Seattle,20,00 . É por isso que você obtém apenas duas linhas neste caso. No segundo caso, você tem um total de 3 + 2 =5 combinações.

Agora você pode ver por que GROUP BY funciona apenas no segundo caso.