sql >> Database >  >> RDS >> Sqlserver

Niet de juiste SUM-waarden krijgen in SQL Server 2012 bij gebruik van een PIVOT

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.



  1. Splitfunctie in SQL Server 2008

  2. Stel het gegevenstype van een cel expliciet in als tekst voor getalwaarden

  3. isnumeric() met PostgreSQL

  4. MySQL maandelijkse verkoop van de afgelopen 12 maanden inclusief maanden zonder verkoop