sql >> Base de Datos >  >> RDS >> Sqlserver

No obtener los valores SUM correctos en SQL Server 2012 cuando se usa un PIVOT

La siguiente consulta debería darte lo que quieres:

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 comprender por qué obtiene resultados inesperados, pruebe su consulta sin GROUP BY cláusula:

SELECT Store, Sold, [John], [Jim], [Alex]
FROM 
    #Foo
PIVOT
    (SUM(Waste)
     FOR Employee IN ([John], [Jim], [Alex])
    ) PVT

Salida:

Store       Sold    John    Jim     Alex
Harrisburg  20,00   20,00   10,00   NULL
Seattle     20,00   NULL    10,00   10,00

Ahora, vuelva a intentar lo mismo con la segunda versión de los datos de muestra:

Salida:

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

Al comparar los 2 conjuntos de resultados diferentes, puede ver claramente que PIVOT tiene lugar para cada combinación de columnas que no participan en él, es decir, para cada combinación de Store , Sold .

En el primer caso solo hay Harrisburg,20,00 y Seattle,20,00 . Es por eso que solo obtienes dos filas en este caso. En el segundo caso tienes un total de 3 + 2 =5 combinaciones.

Ahora puedes ver por qué GROUP BY funciona solo en el segundo caso.